如何在多个条件下断言一次?

jac*_*118 0 python pytest

如何使以下代码更加 Pythonic?所以我可以将 if/else 和 2 assert 语句合并为一行?

@pytest.mark.parametrize('para', [1, -1, 0])
def test_xxxx(self, para):
    def test(value):
        return False if value >= 0 else True

    if para >= 0:
        assert test(para) is False
    else:
        assert test(para) is True
Run Code Online (Sandbox Code Playgroud)

Sov*_*iut 6

明确并简单地写出包含输入和预期输出的 3 个断言(注意:我将你的函数放在你的测试之外,并给了它一个更清晰的名字)。

def my_func(value):
    return False if value >= 0 else True

def test_my_func(self):
    assert my_func(1) is False
    assert my_func(-1) is True
    assert my_func(0) is True
Run Code Online (Sandbox Code Playgroud)

这是“pythonic”,因为正如 PEP-8 所说,“显式总是比隐式更好”。在处理测试时,编写尽可能少的功能代码比编写更少的行更重要。

三个显式断言比古怪的参数化循环或试图使其成为单行的失败的可能性要小得多。