unittest, doctest 2種類のテストツール

Pythonには2種類のテストツールがある。
unittestとdoctestだ。
unittestはXPから広まったテストファースト、TDDでお馴染みのxUnitのPython版だ。
TestCaseを作ってTestRunnerでテストを走らせる。

doctestは、全く異なる方法でテストを記述する。
モジュールや、クラス、メソッドに対するドキュメント文字列中に実行例を書く。
もともとドキュメント文字列は、
実行時にそのオブジェクト(クラスや関数、モジュール)の __doc__ 属性から取得できるものとして存在していた。
(そう、コマンドラインインタプリタ実行中に、そのオブジェクトに関するドキュメントが直接取得できるのだ。)
そして、pydocによりAPIドキュメントとして抽出することができるようになり、doctestによって、コメントに書いたサンプルコードを実行することまでできるようになった。

doctestはその性質上、網羅的なテストをするのには向いていないと思う。
基本的なコンセプトが分かる代表的な実行例をサンプルコードとして記述しておくことができて、ついでにちゃんと動くか確認できるくらいのものがいい。
網羅的なテストはunittestの出番だ。
PyMockのような疑似オブジェクトを準備するような、使う側にとってはどうでもいい、でも作る側にとって書くのに気を使う(文字列中では構文ハイライトがきかない)コードを書く必要があるテストは特にそうすべきだ。

doctestを使った例 aodagの日記 [Python]Pythonでconstメソッドを使う