web-dev-qa-db-ja.com

Pycharmユニットテストインタラクティブデバッグコマンドラインが機能しない

単体テストを(pycharmテストランナーを介して)デバッグする場合、インタラクティブコマンドラインをオンにすることができますが、(通常のスクリプトをデバッグする場合とは異なり)入力されたコマンドは出力を生成しません。実際のところ、stderrは期待どおりに機能するため、stdoutはどこかでキャプチャされているようです。

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

これは予想される動作ですか?私はインタラクティブなデバッグコンソールが本当に好きで、ユニットテストをデバッグするときにもうまく動作すれば素晴らしいでしょう。

42
SleepingPills

これは、テストランナーがstdoutをキャプチャしているが、stderrをキャプチャしていないことが原因である可能性があります。

py.test which stdoutとstderrの両方をキャプチャ を使用しているため、出力がまったく表示されません。出力を確認したい場合は、-sフラグをpy.testランナーに渡す必要があります。これは、実行/デバッグ構成を変更し、このフラグをオプションフィールドに追加することで実行できます。 ([実行]> [構成の編集]> [デフォルト]> Pythonテスト> py.test> [追加の引数]フィールドに-sを追加します。)

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

注:-sフラグは ノーズテスト でも同様に使用できます。

86
Inti

テストを実行するたびに実行/デバッグ構成を変更したくない場合は、JB_DISABLE_BUFFERING環境変数を「-s」として設定できます。 ^ + SHIFT + Dショートカットを使用して、エディターで現在のファイルのテストをデバッグする場合に便利です。

4
SilentGuy

単体テストの場合、Pycharmの実行/デバッグ構成に「--capture = no」を追加できます-これにより、すべての出力がリアルタイムで表示されます

3
pymen