2013-07-23 9 views
21

Podczas debugowania testów jednostkowych (za pośrednictwem pycharm test runner) można włączyć interaktywną linię poleceń, ale (w przeciwieństwie do debugowania zwykłych skryptów) wprowadzone komendy nie powodują dowolne wyjście. W rzeczywistości okazuje się, że stdout jest przechwytywane gdzieś, bo stderr działa zgodnie z oczekiwaniami:Linia komend interaktywnego debugowania testu Pycharm nie działa

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

Jest to oczekiwane zachowanie? Bardzo podoba mi się interaktywna konsola debugowania i byłoby świetnie, gdyby zachowywała się dobrze również podczas debugowania testów jednostkowych.

Odpowiedz

40

Jest to prawdopodobne, ponieważ Twój biegacz testowy przechwytuje standardowe wyjście, ale nie stderr.

Używam py.test który , więc nie widzę żadnego wyjścia. Jeśli chcę zobaczyć wyjście, muszę przekazać flagę -s mojemu plikowi testowemu py.test, który można wykonać, modyfikując konfigurację run/debug i dodając tę ​​flagę do pola opcji. (Run> Edytuj> Konfiguracje> Domyślne testy Python> py.test> Add -s do pola opcji.)

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

Uwaga: flaga -s mogą być równie stosowane z nose tests

+5

Kliknąłem przycisk upvote, aż mój palec zaczął się sztywnieć – mbatchkarov

+0

(Uruchom> Edytuj konfiguracje> Domyślne> Testy w Pythonie> py.test> add -s do pola opcji.) –

+3

(Uruchom> Edytuj konfiguracje> Domyślne> Testy w języku Python> py.test> add-s w polu opcji ------> (Dodatkowe argumenty).) Ustawienia domyślne testy uruchamiania przez pytest: (Preferencje> Narzędzia> Narzędzia z Pythonem> domyślny biegacz testowy) –

1

Dla unittest można dodaj "--capture = no" do konfiguracji Pycharm Run/Debug - to pokaże wszystkie dane wyjściowe w czasie rzeczywistym

Powiązane problemy