PytestでStepInやbreakpointを使う
経緯
普段の開発ではpytestを使用して、TDDを行っている。
pythonのテストといえば、python標準のunittestもあるが、テスト結果の表示や制御のしやすさからpytestを選択する人が周りでは多いように思う。
で、pytestを使用しているが、今のプロジェクトではconftestでtime freezeやmotoを読み込んでいて、
テストのコンテキストでいろいろとモジュールが用意されていないとテストができない。
vscodeの機能でpytestを実行する機能もあるが、テストディスカバリーがうまく動かずという状態だった。
ということで、自分の悪い癖だが、我慢すればprintデバッグでも問題ないのでずっと我慢していた。
とはいえ、テストの中にデバッガーを仕掛けておかないと、値の検証やなんかがしづらい。
ということで、breakpointやstep実行の仕方について触れたい。
方法
方法はいたって簡単。
pytestを実行している時にpdb(python標準のデバッガー)が使えるのでそれを使うだけである ※
breakpointを使用したいファイルで
import pdb
その後、breakpointを使用したい箇所で以下のように記載
pdb.set_trace()
pytestを実行すると以下のようなpromptが開くので、
(pdb) s # ステップイン (pdb) n # ステップオーバー (pdb) c # 次のブレークポイントへ (pdb) {変数名} # 変数の表示
と言った感じで使えます。
まとめ
我慢は禁物でちゃんとやり方を調べるべき。 そして、テスティングツールとして当然breakpointの当て方はあるので、ちゃんと公式ドキュメントを読むべきだった。