为什么pytest固定装置不应该直接从测试中调用



我知道pytest fixture在直接从测试中调用fixture时会引发错误。但我不完全明白为什么。就上下文而言,我是python的初级开发人员,所以我可能缺少一些需要解释的明显内容。

我有一个固定装置如下:

@pytest.fixture()
def get_fixture_data_for(sub_directory: str, file_name: str) -> json:
file_path = Path(__file__).parent / f"{sub_directory}"
with open(file_path / f"{file_name" as j:
data = json.load(j)
return data

然后是一个类似的测试

def test_file_is_valid():
data = get_fixture_data_for('some_subdir', 'some_filename.json')
#do something with this information
...

我有许多不同的测试文件,它们将使用这个fixture函数从文件中读取数据,然后将数据发布到集成测试的端点。

当运行这个程序时,我得到一个错误,即fixture不应该被直接调用,应该是created automatically when test functions request them as parameters。但为什么呢?

我在文档中看到了这一点:https://docs.pytest.org/en/stable/deprecations.html#calling-fixture,但我不明白为什么这个功能被弃用。

为将来遇到这个问题的新手回答我自己的问题。正如Michael在上面的评论中所暗示的那样,我正在尝试使用helper函数作为fixture。

测试套件运行时,固定装置会加载并运行一次(取决于您提供的范围(。它们是用来设置测试的。例如,如果您有一个dict需要填充和加载,那么它将被传递到测试中;这最好用固定装置来处理。

但是,如果您想操作测试中生成的一些数据,您可以使用辅助函数,因为这不是用于设置测试的函数。

最新更新