私たちがそのようなsmthを持っていると仮定しましょう:
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)
この方法でテストするのは理にかなっています、私見。
foo(7)
です。コードテストは問題ありません。適切なメッセージが表示され、すべてのpytest出力を使用してデバッグするのが簡単になります。@Faruk('Unexpected error...'
)から強制された提案は、エラーについて何も述べておらず、行き詰まります。それをより良くするためにあなたができる唯一のことはあなたの意図をのように述べることですtest_foo3_works_on_integers_within_range()
。