2013-07-23 8 views
21

Wenn Debugging Unit-Tests (über die Pycharm-Test-Runner), kann man die interaktive Befehlszeile aktivieren, aber (anders als beim Debuggen von regulären Skripten) die eingegebenen Befehle nicht produzieren jede Ausgabe. Wie in der Tat scheint es, dass stdout irgendwo erfasst wird, weil Stderr wie erwartet funktioniert:Pycharm Einheit Test interaktive Debug-Befehlszeile funktioniert nicht

>>> print "a" 
>>> import sys 
>>> sys.stderr.write("moof") 
moof 
>>> sys.stdout.write("moof") 
>>> sys.stderr.write("test") 
test 

Ist das erwartete Verhalten? Ich mag die interaktive Debug-Konsole sehr, und es wäre toll, wenn sie sich auch beim Testen von Komponententests gut benimmt.

Antwort

40

Dies ist wahrscheinlich, weil Ihr Test Runner Stdout aber nicht Stderr erfasst.

Ich benutze py.test welche captures both stdout and stderr so sehe ich überhaupt keine Ausgabe. Wenn ich die Ausgabe sehen möchte, muss ich das Flag -s an meinen py.test-Runner übergeben, was durch Ändern der run/debug-Konfiguration und Hinzufügen dieses Flags zum Optionsfeld erfolgen kann. (Run> Bearbeiten Konfigurationen> Standardwerte> Python Tests> py.test>-s zu den Optionen-Feld hinzufügen.)

>>> print 'a' 
a 
>>> import sys 
>>> sys.stderr.write('moof') 
moof 
>>> sys.stdout.write('moof') 
moof 
>>> sys.stderr.write('test') 
test 

Hinweis: Die -s Flag kann ebenso mit nose tests

+5

Ich klickte auf die Schaltfläche "Upvote", bis mein Finger steif wurde – mbatchkarov

+0

(Ausführen> Konfigurationen bearbeiten> Defaults> Python Tests> py.test> füge -s dem Optionsfeld hinzu.) –

+3

(Ausführen> Konfigurationen bearbeiten> Defaults> Python-Tests> py.test> add -s zum Optionsfeld ------> (Zusätzliche Argumente).) Einstellungen Standard-Lauftests von pytest: (Einstellungen> Tools> Python Intergrated Tools> Standard-Test-Runner) –

1

Für Unittest verwendet werden, können Sie füge '--capture = no' zu Pycharm Run/Debug configuration hinzu - dies zeigt alle Ausgaben in Echtzeit an

Verwandte Themen