【发布时间】:2023-03-03 20:18:01
【问题描述】:
考虑以下 Pytest:
import pytest
class TimeLine(object):
instances = [0, 1, 2]
@pytest.fixture
def timeline():
return TimeLine()
def test_timeline(timeline):
for instance in timeline.instances:
assert instance % 2 == 0
if __name__ == "__main__":
pytest.main([__file__])
测试test_timeline 使用Pytest 夹具timeline,它本身具有instances 属性。该属性在测试中被迭代,因此只有当断言对timeline.instances 中的每个instance 都成立时,测试才会通过。
然而,我实际上想做的是生成 3 个测试,其中 2 个应该通过,其中 1 个会失败。我试过了
@pytest.mark.parametrize("instance", timeline.instances)
def test_timeline(timeline):
assert instance % 2 == 0
但这会导致
AttributeError: 'function' object has no attribute 'instances'
据我了解,在 Pytest 固定装置中,函数“成为”它的返回值,但这似乎在测试参数化时还没有发生。如何以所需的方式设置测试?
【问题讨论】:
-
这能回答你的问题吗? Pass a parameter to a fixture function