Python 我希望一个失败的测试是好的

Python 我希望一个失败的测试是好的,python,pytest,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),

我有一个测试失败了,但我希望它会失败,我希望
pytest
说它通过了。我该怎么做

例如,我有一个最小值=30,最大值=40

以下是我正在做的:

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

  • 失败(断言错误)
  • 通过
  • 失败(断言错误)
我怎么能有一个报告说所有测试都通过了呢?

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

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

根据你的用例使用一个实际的例子,考虑下面的代码。我们将原始测试数据集分为两组:我们期望通过的测试数据组和我们期望失败的测试数据组。像这样的单元测试应该单独测试一种情况,使每个测试用例更易于编写和理解

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__])
输出

=================================================测试会话开始=============================
平台win32——Python 3.5.2、pytest-3.0.1、py-1.4.31、pluggy-0.3.1
rootdir:C:\Users\\.PyCharmCE2016.3\config\scratches,文件:
收集了3个项目
刮擦3.py。。。
=================================================3在0.02秒内通过===========================

@Tagc:问题是我会得到相反的结果。测试通过,失败,通过。是的,你应该将输入分成两组(“有效”和“无效”案例),并按照弗罗洛的建议分别测试每组。