167

私はPythonでユニットテストを始めようとしていますが、誰かがdoctestとunittestの長所と短所を説明できるかどうか疑問に思っていました。

それぞれをどのような条件で使用しますか?

4

11 に答える 11

188

どちらも貴重です。私はユニットテストの代わりにdoctestとnoseの両方を使用しています。実際にドキュメントとして役立つ使用例をテストで示す場合は、doctest を使用します。通常、これらのテストを包括的にすることはせず、情報提供のみを目的としています。私は doctest を逆に効果的に使用しています。自分のコードが doctest に基づいて正しいことをテストするためではなく、コードに基づいてドキュメントが正しいことを確認するためです。

その理由は、包括的な doctest を使用するとドキュメントが乱雑になりすぎて、結局は使用できない docstring になるか、不完全なテストになるからです。

コードを実際にテストするための目標は、 が何をするかを例で説明するのではなく、すべてのケースを徹底的にテストすることです。

于 2008-12-12T10:23:35.233 に答える
50

私はほとんど独占的にunittestを使用しています。

たまに、doctestで使用できるものをdocstringに入れます。

テストケースの95%は単体テストです。

なんで?私はdocstringをやや短く、要点を絞っておくのが好きです。テストケースは、docstringを明確にするのに役立つ場合があります。ほとんどの場合、アプリケーションのテストケースはdocstringには長すぎます。

于 2008-12-12T01:53:38.960 に答える
36

doctesting のもう 1 つの利点は、コードがドキュメントに記載されているとおりに動作することを確認できることです。しばらくすると、ソフトウェアの変更により、ドキュメントとコードの動作が異なる場合があります。:-)

于 2009-03-20T20:22:31.257 に答える
30

私はバイオインフォマティシャンとして働いており、私が書くコードのほとんどは「1 回限り、1 つのタスク」スクリプトであり、1 回か 2 回だけ実行され、1 つの特定のタスクを実行するコードです。

このような状況では、大きな単体テストを書くのはやり過ぎかもしれません。doctests は便利な妥協案です。それらはより迅速に記述でき、通常はコードに組み込まれているため、別のファイルを開くことなく、コードの動作を常に監視できます。これは、小さなスクリプトを作成するときに役立ちます。

また、doctest は、スクリプトをプログラミングの専門家ではない研究者に渡さなければならない場合にも役立ちます。単体テストがどのように構成されているかを理解するのが非常に難しいと感じる人もいます。一方、doctest は単純な使用例であるため、コピー アンド ペーストするだけで使用方法を確認できます。

では、私の回答を再開します。doctest は、小さなスクリプトを作成する必要がある場合や、コンピューター サイエンティストではない研究者にスクリプトを渡したり、見せたりする必要がある場合に役立ちます。

于 2012-06-02T10:53:08.813 に答える
14

ユニットテストのアイデアを始めたばかりの場合は、doctest使い方がとても簡単なので、まず始めます。また、当然、ある程度のドキュメントも提供します。また、を使用したより包括的なテストではdoctest、ドキュメントを乱雑にしないように、外部ファイルにテストを配置できます。

unittestJUnitなどを使用した経験があり、他の場所とほぼ同じ方法で単体テストを記述できるようにしたい場合は、ぜひお勧めします。

于 2008-12-12T01:55:25.227 に答える
7

私は unittest のみを使用します。doctest はメインモジュールを散らかしすぎていると思います。これはおそらく、徹底的なテストを書くことに関係しています。

于 2008-12-12T02:19:46.753 に答える
7

両方を使用することは、有効でかなり単純なオプションです。このdoctestモジュールは、モジュールまたはファイルからユニットテスト互換のテストスイートを作成するDoctTestSuiteおよびメソッドをそれぞれ提供します。DocFileSuite

そのため、私は両方を使用し、通常はセットアップをほとんどまたはまったく必要としない関数 (引数の単純型) を使用した単純なテストに doctest を使用します。実際、いくつかの doctest テストは、機能を損なうのではなく、機能を文書化するのに役立つと思います。

しかし、より複雑なケースや、より包括的なテスト ケースのセットについては、より多くの制御と柔軟性を提供する unittest を使用します。

于 2008-12-12T03:25:02.330 に答える
7

unittest の代わりに doctest を使用することはありません。少し重複していますが、2 つのモジュールの機能は同じではありません。

  • 私はunittest単体テスト フレームワークとして使用しています。つまり、コードの残りの部分に対する変更の影響をすばやく判断するのに役立ちます。

  • doctestコメント (つまり、docstring) が現在のバージョンのコードに関連していることを保証します。

私が得たテスト駆動開発のメリットは広く文書化されていunittestます。doctest古いコメントがコードのメンテナンスを誤解させるという、はるかに微妙な危険を解決します。

于 2012-12-05T11:18:02.680 に答える
4

doctest はほとんど使用しません。私は自分のコードを自己文書化したいと考えており、docstrings はユーザーに文書を提供します。モジュールに数百行のテストを追加するIMOは、docstringをはるかに読みにくくします。また、単体テストは必要に応じて簡単に変更できると思います。

于 2008-12-12T02:12:54.520 に答える
2

私は発見ベースのシステムを好みます (「nose」と「py.test」、現在は前者を使用しています)。

doctest は、テストがドキュメントとしても優れている場合に適しています。そうでない場合、コードが乱雑になりがちです。

于 2008-12-12T04:20:59.223 に答える