2017-07-12 5 views
3

Ich debugging einen Komponententest fehlgeschlagen, wodurch eine Ausnahme von den Eingeweiden einiger Bibliotheken ausgelöst wird; viele Ausnahmen. Ich benutze ipdb von der Kommandozeile, um es zu debuggen.Django/Python Unit Testing: Lassen Ausnahmen steigen

Wenn ./manage.py test path.to.test ausgeführt wird und die Ausnahme auftritt, fängt der Test-Runner die Ausnahme ab, druckt einen Stack-Trace und markiert den Test als fehlgeschlagen oder was auch immer. Ich verstehe, warum das nützlich ist, anstatt die Ausnahme aufgehen zu lassen.

In meinem Fall möchte ich es so steigen ipdb fängt es und landet mich in einer schönen Position, um Frames nach oben/unten zu bewegen und die Probleme zu debuggen. Ich möchte die Tests nicht in try umhüllen oder aufrufen, wo die Ausnahmen ausgelöst werden. Es ist ein Schmerz und verlangsamt das Debugging. Normalerweise ist das kein Problem, aber heute ist es so.

Q: Kann ich den Test-Runner stoppen, der die Ausnahme abfängt, sodass ipdb ihn stattdessen ohne Codeänderungen erfasst?

Ich habe das Gefühl, dass es einen Weg geben sollte, dies zu tun, da es beim Debuggen sehr hilfreich wäre, aber ich habe es irgendwo auf der Linie verpasst.

(Ps, Python 2.7, 1.6 Django sadface)

+0

Verwenden Sie Pytest als Ihren Läufer eine Option? https://docs.pytest.org/en/latest/usage.html#dropping-to-pdb-python-debugger-on-failures Es hat eine spezielle Option für das Sprudeln zu pdb. –

+0

Nur aus Neugier ... wäre Pycharm eine Option für dich? Sie könnten es viel einfacher finden, nur dies zu verwenden, um Breakpoints zu setzen – Sayse

+1

@Sayse Ich benutze Charme, aber aus irgendeinem Grund (wahrscheinlich die riesige Größe der Codebasis) mit Charme Breakpoints und Debugger ist _stupidly_ langsam, um den Test zu laufen. Mehr Zeit verschwendet, also neige ich dazu, ipdb zu benutzen. –

Antwort

1

Es existieren django-nose, ein django unittest runner, die noch Unterstützung für django hat 1,6 und Python 2.7.

Es gibt eine --pdb Option für die Nase, die:

Tropfen in Debugger auf Ausfälle oder Fehler

Und Sie können es laufen wie folgt:

nosetests --pdb 

Da Sie wollen Um mit ipdb zu arbeiten, gibt es this nose plugin, die noseverwenden können:

nosetests --ipdb 
+0

Sieht vielversprechend aus, ich werde dies überprüfen, danke für die Antwort +1 –

+0

Viel Glück :) @AidenBell –

+0

Kein Glück, 1.6 (mindestens die Version, die wir haben ... vendored :() ist nicht kompatibel und das Zurückarbeiten durch die Django-Nose-Versionen bringt kein Glück, Schande, könnte es anstecken und versuchen, einen Workaround zu finden, da ein Drop-In vielversprechend aussieht. –