我有一个简单的pytest fixture来确保测试数据文件存在(并在测试结束时删除),但是如果给我标题中描述的错误。
@pytest.fixture
def ensure_test_data_file(request):
data_file = server.DATA_FILE_NAME
with open(data_file, 'w') as text_file:
text_file.write(json.dumps(TEST_DATA))
text_file.close()
print(os.path.abspath(data_file))
request.addfinalizer(os.remove(data_file))
如果我删除了终结器,它可以工作(除了不删除文件)。我做错了吗?
答案 0 :(得分:2)
你需要将一个函数对象传递给request.addfinalizer
- 你正在做的是调用 os.remove(data_file)
,它返回None
,因此你'重新做request.addfinalizer(None)
。
在这里,您可以使用request.addfinalizer(lambda: os.remove(data_file))
或request.addfinalizer(functools.partial(os.remove, data_file))
来获取已经“已应用”的参数,但实际上并未调用该参数。
但是,我建议在灯具中使用yield
代替(docs),这样可以让你“暂停”灯具并在两者之间运行测试,从而使这更加清晰:
@pytest.fixture
def ensure_test_data_file(request):
data_file = server.DATA_FILE_NAME
with open(data_file, 'w') as text_file:
text_file.write(json.dumps(TEST_DATA))
text_file.close()
print(os.path.abspath(data_file))
yield
os.remove(data_file)