我希望失败的测试没问题

时间:2017-01-26 10:27:21

标签: python pytest

我有一个失败的测试,但我希望它失败,我希望pytest说它是通过的。我怎么能这样做?

例如,我的最小值= 30,最大值= 40。

这就是我正在做的事情:

@pytest.mark.parametrize(
        "minimum, maximum, expected_min, expected_max", [
            (13, 15, 34, 45),
            (30, 40, 30, 40),
            ("sd", 3, 34, 45),
        ])

我收到了:

  • 失败(断言错误)
  • 传递
  • 失败(断言错误)

我怎样才能有一份报告说所有测试都通过了?

2 个答案:

答案 0 :(得分:4)

最佳操作方法(如果这是您的代码的预期行为)是编辑测试以反映预期的行为。测试用例不仅仅用于获取可以向经理/客户/同事/等人展示的报告,它们也是一种文档形式。测试用例向人们展示了代码的预期行为,因此任何看到该测试的人都会认为你的代码会接受那里显示的所有输入。

如果第一个和第三个输入是非法的,你应该创建一个不同的测试用例,测试代码如何处理非法输入。

答案 1 :(得分:3)

要使用基于您的用例的实际示例构建frollo's answer,请考虑以下代码。我们将原始测试数据集分成两组:我们期望通过的那些和我们期望失败的那些。像这样的单元测试应该单独测试一种情况,使每个测试用例更容易编写和更容易理解。

import pytest


class TestMinMax:
    @pytest.mark.parametrize(
        "minimum, maximum, expected_min, expected_max", [
            (30, 40, 30, 40),
        ])
    def test_valid_examples(self, minimum, maximum, expected_min, expected_max):
        assert minimum == expected_min
        assert maximum == expected_max

    @pytest.mark.parametrize(
        "minimum, maximum, expected_min, expected_max", [
            (13, 15, 34, 45),
            ("sd", 3, 34, 45),
        ])
    def test_invalid_examples(self, minimum, maximum, expected_min, expected_max):
        with pytest.raises(AssertionError):
            assert minimum == expected_min
            assert maximum == expected_max


if __name__ == '__main__':
    pytest.main(args=[__file__])

<强>输出

============================= test session starts =============================
platform win32 -- Python 3.5.2, pytest-3.0.1, py-1.4.31, pluggy-0.3.1
rootdir: C:\Users\<<user>>\.PyCharmCE2016.3\config\scratches, inifile: 
collected 3 items

scratch_3.py ...

========================== 3 passed in 0.02 seconds ===========================