我希望考试不及格就没事

2024-04-20 03:12:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个测试失败了,但我希望它失败,我想说它通过了。我该怎么做?你知道吗

例如,我有一个最小值=30,最大值=40。你知道吗

下面是我要做的:

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

我收到:

  • 失败(断言错误)
  • 通过
  • 失败(断言错误)

我怎么能有报告说所有的测试都通过了?你知道吗


Tags: pytest报告错误断言sdminmaxexpected
2条回答

要基于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 ===========================

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

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

相关问题 更多 >