【发布时间】:2018-01-31 03:18:40
【问题描述】:
我正在使用一个主要使用 unittest 编写的代码库。测试使用 pytest 运行。我试图通过参数化其中一些来简化测试。为了实现这个目标,我正在尝试学习如何使用 pytest 固定装置并重构一些现有的基于单元测试的测试。当前的测试在 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')
但是,此模块夹具中的 print() 语句永远不会执行。作为中间步骤,我将保留基于单元测试的结构并添加到它。是否可以按照我想要的方式进行这项工作,或者我是否需要完全放弃 unittest 并直接转到 pytest。
【问题讨论】:
-
您希望在哪里使用这个夹具?你也想在这里打开
autouse=True吗?一般来说,fixture 仅在它们是测试的参数时才会执行,并且与作用域假设相比,它们不是通用的清理机制 -
@Cireo 你的意思是我应该像
register_cleanup()一样将autouse=True添加到foo_fixture()吗? -
@Cireo 随意发布这个作为答案。
标签: python pytest python-unittest fixtures