import pytest
def add(x):
return x + 1
def sub(x):
return x - 1
testData1 = [1, 2]
testData2 = [3]
class Test_math(object):
@pytest.mark.parametrize('n', testData1)
def test_add(self, n):
result = add(n)
testData2.append(result) <-------- Modify testData here
assert result == 5
@pytest.mark.parametrize('n', testData2)
def test_sub(self, n):
result = sub(n)
assert result == 3
if __name__ == '__main__':
pytest.main()
在此方案中只执行了3次测试:Test_math.test_add[1]
,Test_math.test_add[2]
,Test_math.test_sub[3]
。
Test_math.test_sub
仅使用预定义数据[3]
执行,这不是我期望的[2,3,3]
。如何解决?
更新[1,2,3] - &gt; [2,3,3]
答案 0 :(得分:1)
不完全确定它为什么不起作用,但这样做是不错的,因为测试顺序无法保证(除非您实施特殊代码来命令执行测试) 。
除了这个以及测试设计的其他问题之外,你可以通过在testData1
装饰器中加入testData2
和pytest.mark.parametrize
来实现你想要的方式。
@pytest.mark.parametrize('n', testData1 + testData2)
def test_sub(self, n):
result = sub(n)
assert result == 3
现在,请记住,使用您的测试定义时,这将始终失败,因为sub(n)
与testData1 + testData2
的结果永远不会是3
。