我有一个示例代码,其中我有一个带有两个断言的参数化测试函数:
@pytest.mark.parametrize("test_input,expected", [
("3", 8),
("2", 6),
])
def test_eval(test_input, expected):
assert test_input == expected # first assert
assert test_input + 2 ==expected # second assert
所以我想要的输出是(伪代码):
assertion error 3==8
assertion error 5==8
assertion error 2==6
assertion error 4==6
在对所有组合执行测试时,即使第一个断言失败,还是有办法达到第二个断言吗?
作为替代方案,我想知道有没有办法把它放到课堂上,例如类似的东西:
@pytest.mark.parametrize("test_input,expected", [
("3", 8),
("2", 6),
])
class TestFunc(object):
def test_f1(test_input, expected):
assert test_input==expected
def test_f2(test_input, expected):
assert test_input+2==expected
我希望获得与前一种情况相同的输出:
assertion error 3==8
assertion error 5==8
assertion error 2==6
assertion error 4==6
答案 0 :(得分:0)
有pytest-expect插件可以执行此类操作。
您在课堂上使用@pytest.mark.parametrize
概述的方式是开箱即用的,您只需忘记self
。
另一种可能性是简单地编写两个测试并共享参数化:
eval_parametrize = pytest.mark.parametrize("test_input, expected", [
("3", 8),
("2", 6),
])
@eval_parametrize
def test_f1(test_input, expected):
assert test_input == expected
@eval_parametrize
def test_f2(test_input, expected):
assert test_input + 2 == expected