我想对多个夹具值运行同一组测试,但我不想在夹具定义中“硬编码”这些值。
我的用例是一个具有多个实现的接口,我想在每个实现上运行相同的测试。
例如,my_code.py
class Interface:
def method():
pass
class Impl1(Interface):
def method():
return 1
class Impl2(Interface):
def method():
return 2
test_interface.py:
def test_method(instance: Interface):
assert type(instance.method()) == int
test_impl1.py
from my_code import Impl1
@pytest.fixture
def instance():
return Impl1()
test_impl2.py
from my_code import Impl2
@pytest.fixture
def instance():
return Impl2()
显然这段代码不起作用(因为找不到夹具“实例”)。我可以在 conftest.py 中写这样的东西
@pytest.fixture(params=[Impl1(), Impl2()])
def instance(request):
return requst.param
但我希望能够运行 test_impl1.py 来仅测试 Impl1。另外,如果我要编写 Impl3,我不想更改 conftest.py,我只想添加简单的 test_impl3.py 如果我的实现完全在其他包中怎么办?
简而言之,我想为固定装置列表中的每个值重用我的测试,但我想在运行时更改此固定装置列表(例如,取决于可用的实现)
心有法竹
相关分类