我正在使用代码库,该代码库主要使用unittest编写 . 测试使用pytest运行 . 我试图通过参数化其中一些来简化测试 . 为了实现这一目标,我试图学习如何使用pytest fixture并重构一些现有的基于unittest的测试 . 目前的测试在conftest.py中有一个全局夹具:
@pytest.fixture(autouse=True)
def register_cleanup():
yield True
print("cleaning up database")
现在我想添加一个特定于我的测试模块之一的夹具,类似于
@pytest.fixture()
def foo_fixture():
print("setup fixture")
yield
print("tear down fixture")
class Foo(unittest.TestCase):
def setUp(self):
print('unittest setUp()')
def test(self):
print('test')
但是,此模块fixture中的 print()
语句永远不会执行 . 作为一个中间步骤,我保持基于unittest的结构并添加它 . 是否有可能按照我想要的方式工作,或者我需要完全废弃unittest并直接进入pytest .
2 回答
你要标记它:
注意:您可能有多个
conftest.py
. 将更具体的夹具放入此测试子目录的conftest.py
中 .您希望在哪里使用这种灯具?
你想在这里打开
autouse=True
吗?通常,只有当它们是测试的参数时才执行fixture,并且它们比作用域假设更少的通用清理机制 . 通过为此灯具打开autouse
,您实际上将为当前模块添加额外的设置清理步骤:https://docs.pytest.org/en/latest/fixture.html#autouse-fixtures-xunit-setup-on-steroids
[改编评论回答]