テクめも

プログラミング関連のちょっとしたTipsなどを書いています。

pytestで複数の条件を組み合わせたテストする

pytestでは、parametrizeを使うと、条件を変えてテストすることができます。

以下の例では、x=0x=1x=2の3パターンがテストされます。

@pytest.mark.parametrize("x", [0, 1, 2])
def test_foo(x):
    pass

ここに、flag=True/Falseも条件に加えたいとします。 x=0, flag=Truex=0, flag=Falsex=1, flag=True、...と6パターンに増えます。

@pytest.mark.parametrize(
    "x, flag", [
        (0, True), (0, False),
        (1, True), (1, False),
        (2, True), (2, False)
    ]
)
def test_foo(x, flag):
    pass

6パターンくらいだと上記のようにかけますが、掛け算の数が増えると大変です。 そこで、parametrizeは複数重ねることができ、これを用いると楽に書けます。

@pytest.mark.parametrize("x", [0, 1, 2])
@pytest.mark.parametrize("flag", [True, False])
def test_foo(x, flag):
    pass

参考

Parametrizing fixtures and test functions — pytest documentation