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().