1. ホーム
  2. python

[解決済み] Pytest を使用して Error が発生しないことを確認する方法

2022-06-13 07:52:30

質問

このようなものがあるとします。

import py, pytest

ERROR1 = ' --- Error : value < 5! ---'
ERROR2 = ' --- Error : value > 10! ---'

class MyError(Exception):
    def __init__(self, m):
        self.m = m

    def __str__(self):
        return self.m

def foo(i):
    if i < 5:
        raise MyError(ERROR1)
    elif i > 10:
        raise MyError(ERROR2)
    return i


# ---------------------- TESTS -------------------------
def test_foo1():
    with pytest.raises(MyError) as e:
        foo(3)
    assert ERROR1 in str(e)

def test_foo2():
    with pytest.raises(MyError) as e:
        foo(11)
    assert ERROR2 in str(e)

def test_foo3():
        ....
        foo(7)
         ....

Q: MyError が発生しないことをテストする test_foo3() はどのように作ればよいのでしょうか? 明らかに、私はただテストすることができました。

def test_foo3():
    assert foo(7) == 7

しかし、私はpytest.raises()を介してそれをテストしたいです。何らかの方法で可能ですか? 例えば:ケースで、その関数"foo"は全く戻り値を持っていません。

def foo(i):
    if i < 5:
        raise MyError(ERROR1)
    elif i > 10:
        raise MyError(ERROR2)

この方法でテストするのは意味があるかもしれませんね、イミフ。

どのように解決するのですか?

テストは予期せぬExceptionを発生させた場合、失敗します。foo(7)を実行すれば、MyErrorが発生しないことをテストしたことになります。そのため、以下のようにすれば十分です。

def test_foo3():
    foo(7)

もし、明示的にassert文を書きたいのであれば

def test_foo3():
    try:
        foo(7)
    except MyError:
        pytest.fail("Unexpected MyError ..")