2011-02-09 13 views
68

Nosetests --pdbエラーまたは失敗時に停止させてもらいますが、これは私のニーズにとっては遅すぎます。実行中にコードをステップ実行すると、どこに問題があるのか​​をデバッグするのに役立ちます。nosetests --pdbオプションを使用してブレークポイントを設定する

しかし、nosetestsは、相対インポート(つまり、パッケージ内のテスト)に依存するテストを許可するので便利です。

テストを実行する前にブレークポイントを設定するにはどうすればよいですか? 現在、私は以下を使用しています:

python -m pdb /path/to/my/nosetests testfile.py 

この解決方法は適切ではありません。 Nosetestsがpdb出力を妨げ、キーボードのコントロール(矢印キーなど)が壊れています。

import pdbを使用しています。 pdb.set_trace()は良い考えですが、nosetestsはpdbコンソールへのアクセスをブロックしています。

答えて

92

あなたは、デバッガで停止したいあなたの元に

import pdb; pdb.set_trace() 

どこにでも追加することができます。

-sをノーズに渡して、stdoutをキャプチャしないようにしてください。

+0

私は私の質問にこれを追加するちょうど約ました。これは許容可能な解決策でもありません。これをnosetestsとともに使用すると、pdbコンソールへのアクセスがスクリーニングされ、pdbコマンドが実行されないため、文字通り使用できないことは明らかです。 – Devin

+14

nosetestsに-sフラグを付けてstdoutをキャプチャできないようにすると、pdbをうまく使うことができます。 –

+1

しかし、これはブレークポイントには役に立ちません。 – SkyLeach

118

-sを覚えていても、Noseに付属するset_traceの亜種を使用することをお勧めします。デバッガに侵入したい場合はいつでも追加してください。

from nose.tools import set_trace; set_trace() 

stdin/outリダイレクションがあなたのために処理されます。私が実行した唯一の奇妙な副作用は、ノーズ実行中にデバッグ中にpdb(runを使用)内からコードを再起動できないことだけです。

+0

@Devin場合によってはこれがあなたの問題を解決しましたか? –

+6

これは完全に私のために働いた。 :)おかげでマット! – bitcycle

+0

これに関する文書はありますか?どのようにループから移動するには? – Clayton

1

あなたが無制限の素晴らしさを使用するために、 ipython をお持ちの場合:

import ipdb; ipdb.set_trace() 
関連する問題