2016-03-23 7 views

Antwort

0

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 
+1

Danke. Aber pytest_assertrepr_compare wird nur aufgerufen, wenn die Assert fehlschlägt. – Sharad

+0

Was ist mit der Definition Ihrer eigenen Helper-Assert-Methode, die zuerst foo oder bar aufruft und dann pytest assert aufruft? – Bahrom

+0

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

0

versuchen Wenn Sie pyhamcrest statt interne py.tests assert verwenden können. So ist es möglich, nur assert_that Methode mit Ihren Hooks oder etwas anderes neu zu implementieren.

+0

Sergey Voronezhskiy: Danke! – Sharad

Verwandte Themen