pythonプログラムの単体テストにpy.testを使用しています。 pythonデバッガーを使用して通常の方法でテストコードをデバッグしたいのですが(コードではpdb.set_trace()を意味します)、動作させることはできません。
コードにpdb.set_trace()を入れても機能しません(IOErrorが発生します:出力のキャプチャ中にstdinから読み取ります)。また、オプション--pdbを使用してpy.testを実行しようとしましたが、アサーションの前に何が起こるかを調べたい場合、それはうまくいかないようです。アサーションが失敗すると中断し、その行から先に進むとプログラムが終了します。
誰かがデバッグを取得する方法を知っていますか、またはデバッグとpy.testが一緒になることを意図していませんか?
それは本当に簡単です:コードのデバッグを開始したい場所に_assert 0
_を置き、次のようにテストを実行します:
_py.test --pdb
_
完了:)
あるいは、pytest-2.0.1以降を使用している場合は、テストコードの任意の場所に配置できるpytest.set_trace()
ヘルパーもあります。 docs です。 pdbデバッガーのコマンドラインに送信する前に、内部的にキャプチャを無効にするように注意します。
キャプチャを無効にしてpy.testを実行し、通常どおりpdb.set_trace()を使用できることがわかりました。
> py.test --capture=no
============================= test session starts ==============================
platform linux2 -- Python 2.5.2 -- pytest-1.3.3
test path 1: project/lib/test/test_facet.py
project/lib/test/test_facet.py ...> /home/jaraco/projects/project/lib/functions.py(158)do_something()
-> code_about_to_run('')
(Pdb)
最も簡単な方法は、py.testメカニズムを使用してブレークポイントを作成することです
http://pytest.org/latest/usage.html#setting-a-breakpoint-aka-set-trace
_import pytest
def test_function():
...
pytest.set_trace() # invoke PDB debugger and tracing
_
または、pytest
のデバッガーをワンライナーとして使用する場合は、import pdb; pdb.set_trace()
をimport pytest; pytest.set_trace()
に変更します
私はpy.testに精通していないので、unittestに入れて、次のことを行います。たぶんpy.testも同様です:
テストモジュール(mytestmodule.py)で:
if __== "__main__":
unittest.main(module="mytestmodule")
次に、テストを実行します
python -m pdb mytestmodule.py
インタラクティブなpdbシェルが表示されます。
ドキュメントを見ると、py.testには--pdb
コマンドラインオプション: