Der Python-Unittest-Runner behandelt alle Ausnahmen. Ich möchte sie mit meinem Debugger abfangen.
Gibt es eine Möglichkeit, dass mein Unittest-Runner Testausnahmen erneut aufruft, um den Prozess zu beenden? Ich möchte sie selbst behandeln.
Bearbeiten : Eine Lösung gefunden.
Sie können eine unittest.TestSuite erstellen und debug () aufrufen Führen Sie die Tests aus, die Sie debuggen möchten - einschließlich des Abfangens der Ausnahmen mit Ihrem Debugger!
Es kann leicht mit diesem Muster gemacht werden:
%Vor%Ich weiß, das ist ein alter Faden, und vielleicht waren einige dieser Dinge nicht da, als die Frage gestellt wurde. Aber nur für die Nachwelt ...
Sie können Ihre unittest
-Tests mit py.test als Test-Runner ausführen. Sie erhalten einige < a href="http://pytest.org/latest/"> großartige Funktionen direkt aus der Box. Direkt zum Punkt Ihrer Frage gibt es ein paar gute Möglichkeiten, mit py.test zu debuggen, einschließlich mit PyCharm.
Speziell zum Debuggen von bei jedem Fehler , nach dem Tod, mit PyCharm - wonach Sie fragen - Sie können das pytest-pycharm
Plugin installieren.
(Ich arbeite in einem virtualenv pro-Projekt, so dass dies keinen Nachteil für mich hat. Ich empfehle Ihnen, das gleiche zu tun. Ansonsten beachten Sie, dass Sie es global installieren, und dieses Plugin wird für alle Projekte aktiv sein dieser Python-Interpeter.)
Siehe auch:
Wenn Sie überprüfen möchten, warum der Komponententest fehlgeschlagen ist, müssen Sie die Ausnahme nicht wirklich auslösen.
Setzen Sie einfach einen Haltepunkt in der Zeile, in der die Ausnahme auftritt, und führen Sie sie im Debug-Modus aus. PyCharm wird auf den Debug-Bildschirm wechseln und Sie können Variablen und den Aufruf-Stack prüfen.
Die Lösung, die zu Frage selbst hinzugefügt wird, ist nicht groß IMO:
Meine Lösung ist "hacky", aber es hat keine Nachteile. Das Testverhalten ändert sich auch nur, wenn Tests unter Debugger ausgeführt werden.
unittest.TestResult.addError wird im Exception-Handler aufgerufen, wenn vom Test keine Ausnahme erwartet wird. Ich definiere diese Methode neu, um die Exception, die behandelt wird, erneut auszulösen.
Ich verwende diese Klasse als Elternteil für meine Testfälle:
%Vor%Die Lösung wurde mit Python 3.4 und PyCharm 3.4 getestet.
Tags und Links python unit-testing debugging exception pycharm