2

バージョン管理に Git を使用して Python でプロジェクトに取り組んでおり、いくつかの単体テストを追加することにしました。ただし、これを行う最善の方法についてはわかりません。

主な質問が 2 つあります。使用するフレームワークと、テストをどのように配置する必要があるかです。まず、Python に組み込まれている unittest を使用する予定ですが、他のものを好むやむを得ない理由がある場合は、提案を受け付けています。2 番目の質問は、より難しい質問です。なぜなら、私のコードは、多くのサブモジュールと相対的なインポートによって、すでに多少まとまりがなくなっているからです。テスト コードをどこに配置すればよいかわかりません。また、可能であれば、テスト コードを他のすべてのものから分離したいと考えています。最後に、できれば単一のコマンドライン コマンドと最小限のパス設定で、テストを簡単に実行できるようにしたいと考えています。

大規模な Python プロジェクトはどのようにテストを処理しますか? 通常、すべての新しいチェックインでテストを実行する自動システムがあることを理解しています。どうやってやっているの?テスト システムをセットアップするためのベスト プラクティスは何ですか?

4

2 に答える 2

2

テスト フレームワークの選択は、主に個人的な好みに関するものであり、いくつかの一般的なものがあります。

  • unittest — Java の junit フレームワークのクローンであるため、その構文はそれほど Python フレンドリーではありません
  • unittest2 — 注目のユニットテスト
  • pytest — 包括的で複雑なフレームワークですが、ソース コードが少し怖いため、問題が発生した場合に解決策を見つけるのが難しい場合があります
  • 鼻 — pytest から派生しましたが、より単純です。鼻を使用することをお勧めします

たとえば、通常のディレクトリ構造は次のとおりです。

- project
| - module_name
  | - submodule.py
| - tests
  | requirements.txt
  | test_submodule.py
| - requirements.txt

ベスト プラクティスの 1 つは、virtualenv を使用することです。

 $ virtualenv env  # create virtualenv
 $ env/bin/activate  # activate virtualenv
 $ pip install -r requirements.txt  # install project requirements
 $ pip install -r tests/requirements.txt  # install testing requirements
 $ py.test  # if you use pytest
于 2012-08-06T05:44:46.627 に答える
1

Pythonunittestは問題ありませんが、大規模なプロジェクトに単体テストを追加するのは難しい場合があります。その理由は、単体テストが最も小さなブロックの機能のテストに関連しているためです。

単体テストとは、互いに分離された多くの小さなテストを使用することを意味します。それらは、コードのテストされた部分以外には依存しない必要があります。

単体テストが既存のコードに追加される場合、通常は、エラーの原因であることが証明された孤立したケースをテストするためだけに追加されます。追加された単体テストは、エラーを開示するために修正されていない機能で記述されている必要があります。次に、単体テストが成功するようにエラーを修正する必要があります。これは最初の極端です -- 失敗したコードだけに単体テストを追加します。これは必須です。エラーを修正する前に、失敗したコードの単体テストを常に追加する必要があります。

さて、単体テストを使わなかった大規模プロジェクトにどうやって単体テストを追加するかが問題です。単体テストのコード量は、プロジェクト自体のサイズに匹敵する場合があります。このように、他の極端な方法は、すべてに単体テストを追加することです。ただし、これは手間がかかりすぎるため、通常は独自のコードをリバース エンジニアリングして、テスト対象のビルディング ブロックを見つける必要があります。

コードの最も重要な部分を見つけて、それらに単体テストを追加することをお勧めします。

于 2012-08-06T06:09:51.420 に答える