最佳答案
考虑以下 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 fixture 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 fixture 中,函数的返回值是“成为”的,但是在测试被参数化的时候,这似乎还没有发生。如何按照所需的方式设置测试?