私はPythonでユニットテストを始めようとしていますが、誰かがdoctestとunittestの長所と短所を説明できるかどうか疑問に思っていました。
それぞれをどのような条件で使用しますか?
私はPythonでユニットテストを始めようとしていますが、誰かがdoctestとunittestの長所と短所を説明できるかどうか疑問に思っていました。
それぞれをどのような条件で使用しますか?
どちらも貴重です。私はユニットテストの代わりにdoctestとnoseの両方を使用しています。実際にドキュメントとして役立つ使用例をテストで示す場合は、doctest を使用します。通常、これらのテストを包括的にすることはせず、情報提供のみを目的としています。私は doctest を逆に効果的に使用しています。自分のコードが doctest に基づいて正しいことをテストするためではなく、コードに基づいてドキュメントが正しいことを確認するためです。
その理由は、包括的な doctest を使用するとドキュメントが乱雑になりすぎて、結局は使用できない docstring になるか、不完全なテストになるからです。
コードを実際にテストするための目標は、 が何をするかを例で説明するのではなく、すべてのケースを徹底的にテストすることです。
私はほとんど独占的にunittestを使用しています。
たまに、doctestで使用できるものをdocstringに入れます。
テストケースの95%は単体テストです。
なんで?私はdocstringをやや短く、要点を絞っておくのが好きです。テストケースは、docstringを明確にするのに役立つ場合があります。ほとんどの場合、アプリケーションのテストケースはdocstringには長すぎます。
doctesting のもう 1 つの利点は、コードがドキュメントに記載されているとおりに動作することを確認できることです。しばらくすると、ソフトウェアの変更により、ドキュメントとコードの動作が異なる場合があります。:-)
私はバイオインフォマティシャンとして働いており、私が書くコードのほとんどは「1 回限り、1 つのタスク」スクリプトであり、1 回か 2 回だけ実行され、1 つの特定のタスクを実行するコードです。
このような状況では、大きな単体テストを書くのはやり過ぎかもしれません。doctests は便利な妥協案です。それらはより迅速に記述でき、通常はコードに組み込まれているため、別のファイルを開くことなく、コードの動作を常に監視できます。これは、小さなスクリプトを作成するときに役立ちます。
また、doctest は、スクリプトをプログラミングの専門家ではない研究者に渡さなければならない場合にも役立ちます。単体テストがどのように構成されているかを理解するのが非常に難しいと感じる人もいます。一方、doctest は単純な使用例であるため、コピー アンド ペーストするだけで使用方法を確認できます。
では、私の回答を再開します。doctest は、小さなスクリプトを作成する必要がある場合や、コンピューター サイエンティストではない研究者にスクリプトを渡したり、見せたりする必要がある場合に役立ちます。
ユニットテストのアイデアを始めたばかりの場合は、doctest
使い方がとても簡単なので、まず始めます。また、当然、ある程度のドキュメントも提供します。また、を使用したより包括的なテストではdoctest
、ドキュメントを乱雑にしないように、外部ファイルにテストを配置できます。
unittest
JUnitなどを使用した経験があり、他の場所とほぼ同じ方法で単体テストを記述できるようにしたい場合は、ぜひお勧めします。
私は unittest のみを使用します。doctest はメインモジュールを散らかしすぎていると思います。これはおそらく、徹底的なテストを書くことに関係しています。
両方を使用することは、有効でかなり単純なオプションです。このdoctest
モジュールは、モジュールまたはファイルからユニットテスト互換のテストスイートを作成するDoctTestSuite
およびメソッドをそれぞれ提供します。DocFileSuite
そのため、私は両方を使用し、通常はセットアップをほとんどまたはまったく必要としない関数 (引数の単純型) を使用した単純なテストに doctest を使用します。実際、いくつかの doctest テストは、機能を損なうのではなく、機能を文書化するのに役立つと思います。
しかし、より複雑なケースや、より包括的なテスト ケースのセットについては、より多くの制御と柔軟性を提供する unittest を使用します。
unittest の代わりに doctest を使用することはありません。少し重複していますが、2 つのモジュールの機能は同じではありません。
私はunittest
単体テスト フレームワークとして使用しています。つまり、コードの残りの部分に対する変更の影響をすばやく判断するのに役立ちます。
doctest
コメント (つまり、docstring) が現在のバージョンのコードに関連していることを保証します。
私が得たテスト駆動開発のメリットは広く文書化されていunittest
ます。doctest
古いコメントがコードのメンテナンスを誤解させるという、はるかに微妙な危険を解決します。
doctest はほとんど使用しません。私は自分のコードを自己文書化したいと考えており、docstrings はユーザーに文書を提供します。モジュールに数百行のテストを追加するIMOは、docstringをはるかに読みにくくします。また、単体テストは必要に応じて簡単に変更できると思います。
私は発見ベースのシステムを好みます (「nose」と「py.test」、現在は前者を使用しています)。
doctest は、テストがドキュメントとしても優れている場合に適しています。そうでない場合、コードが乱雑になりがちです。