2013-09-08 6 views
5

Ich benutze Pytest mit Mock in meinem Python-Projekt.Wie kann ich Bibliothekscode entfernen Anrufe von pytest Traceback?

Wenn ich einen Testfehler erhalte, der ein Mock-Objekt (fast alle) beinhaltet, taucht der Traceback in den Mock-Bibliotheks-Quellcode ein und mein Code, der den Fehler auslöst, scrollt oft aus dem Blickfeld.

Gibt es eine Möglichkeit zu sagen, py.test, um installierte Bibliotheken aus dem Traceback oder etwas ähnliches auszuschließen? Der Geräuschpegel entfernt sich von dem, was sonst eine süße Testbibliothek ist.

Antwort

4

Es gibt einen Hack: Eine Funktion, die die lokale Variable __tracebackhide__ definiert, wird nicht angezeigt. Beispiel:

def some_support_code(x, y): 
    __tracebackhide__ = True 
    assert x == y 
+0

Hmm, das ist interessant. Ich frage mich, wie ich diese Arbeit in meiner Situation machen würde, um alle falschen Bibliotheksanrufe zu verbergen? – scanny

+0

hinzufügen '__tracebackhide__ = true' in den am häufigsten verwendeten Funktionen Ihrer Mock-Bibliothek. Wenn Sie etwas allgemeineres bevorzugen, können Sie py.test immer direkt hacken. –

+0

Ah, aber Mock ist eine Standard-Python-Bibliothek, installiert über 'pip install mock', nicht Code, den ich selbst entwickelt habe. Nach was ich suchen würde, ist eine Möglichkeit, jeden "Bibliotheks" -Code auszuschließen, den ich nicht besitze, vielleicht indem pytest erkennt, dass er in 'site-package /' oder was auch immer installiert wurde und es ausschließt, dh es wie eine "Black Box", wie ich es tue. – scanny

2

pytest-mock enthält eine Funktion, Tracebacks aus der Mock-Bibliothek verstecken. Installieren Sie einfach pytest-mock und Sie sind fertig.

Verwandte Themen