EDIT
Eigentlich weiter in Frage suchen, vielleicht haben Sie so etwas wie dies wollen - Ihre eigene pytest_assertrepr_compare
und ruft foo
und bar
basiert darauf, dass die Umsetzung: https://pytest.org/latest/assert.html#defining-your-own-assertion-comparison
# content of conftest.py
from test_foocompare import Foo
def pytest_assertrepr_compare(op, left, right):
if isinstance(left, Foo) and isinstance(right, Foo) and op == "==":
return ['Comparing Foo instances:',
' vals: %s != %s' % (left.val, right.val)]
# content of test_foocompare.py
class Foo:
def __init__(self, val):
self.val = val
def __eq__(self, other):
return self.val == other.val
def test_compare():
f1 = Foo(1)
f2 = Foo(2)
assert f1 == f2
Ursprüngliche Antwort unten:
Da Behauptungen eine Ausnahme auslösen würde, könnten Sie so etwas wie
try:
assert(whatever)
except AssertionError as e: # Or whatever other exception you expect
foo() # Call your function
raise e # Reraise to make your test fail
Danke. Aber pytest_assertrepr_compare wird nur aufgerufen, wenn die Assert fehlschlägt. – Sharad
Was ist mit der Definition Ihrer eigenen Helper-Assert-Methode, die zuerst foo oder bar aufruft und dann pytest assert aufruft? – Bahrom
Ja, ich dachte auch an diesen Ansatz. Vielen Dank. Aber damit verliere ich die Fähigkeit von pytest, nach fehlgeschlagenen Behauptungen zu suchen (pytest liefert eine gute Rückverfolgung, welche Assertion fehlgeschlagen ist). Auch wenn es funktioniert, aber es zeigt immer die Hilfsmethode im Traceback und nicht den eigentlichen Code, der Asser aufrufen soll. – Sharad