Nehmen wir an, wir haben so etwas:
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)
....
F: Wie kann ich test_foo3 () dazu bringen, zu testen, dass kein MyError ausgelöst wird? Es ist offensichtlich, dass ich nur testen konnte:
def test_foo3():
assert foo(7) == 7
aber ich möchte das über pytest.raises () testen. Ist das irgendwie möglich? Zum Beispiel: In einem Fall hat diese Funktion "foo" überhaupt keinen Rückgabewert.
def foo(i):
if i < 5:
raise MyError(ERROR1)
elif i > 10:
raise MyError(ERROR2)
Es könnte sinnvoll sein, diesen Weg zu testen, imho.
foo(7)
ist in Ordnung. Sie erhalten die richtige Nachricht und es ist einfacher, mit allen Pytest-Ausgaben zu debuggen. Der Vorschlag, den Sie von @Faruk ('Unexpected error...'
) erzwungen haben, sagt nichts über den Fehler aus und Sie werden stecken bleiben. Das einzige, was Sie tun können, um es besser zu machen, ist Ihre Absicht wie zu erklärentest_foo3_works_on_integers_within_range()
.