Nehmen wir an, wir haben smth wie folgt aus:Wie pytest verwenden, die Fehler überprüfen NICHT
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: Wie kann ich test_foo3() machen zu testen, dass kein MyError erhoben wird? Es ist offensichtlich, dass ich konnte einfach Test:
def test_foo3():
assert foo(7) == 7
, aber ich, dass über pytest.raises testen möchten(). Ist das irgendwie möglich? Zum Beispiel: in einem Fall, dass die Funktion „foo“ haben keinen Rückgabewert überhaupt,
def foo(i):
if i < 5:
raise MyError(ERROR1)
elif i > 10:
raise MyError(ERROR2)
es Sinn machen könnte auf diese Weise zu testen, imho.
Es sieht so aus, als würde man nach einem Problem suchen, der Code Test '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 ("Unerwarteter Fehler ...") erzwungen haben, sagt nichts über den Fehler aus und Sie bleiben stecken. Das einzige, was Sie tun können, um es besser zu machen, ist, Ihre Absicht wie 'test_foo3_works_on_integers_within_range()' anzugeben. – dhill