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 fixture,timeline
,它本身具有属性instances
。在测试中,对这个属性进行迭代,只有当每个instance
在timeline.instances
中都满足断言时,测试才会通过。然而,我实际想做的是生成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的fixtures中,函数“变成”了它的返回值,但在测试参数化时,似乎尚未发生这种情况。我该如何以期望的方式设置测试?