web-dev-qa-db-ja.com

単体テストと統合テストを分離する必要がありますか?

プロジェクトの単体テストと統合テストを作成する必要があります。

  • すべてのテストを単一のテストフォルダーに入れますか?
  • または、単体テストと統合テストをそれぞれ個別のテストフォルダーに含める必要がありますか?
  • それとも、それらを個別のプロジェクトに入れる必要がありますか?

それらを一緒に保持する場合、このアプローチには利点または欠点がありますか?

17
Ahmed Ragheb

一般的に:はい、統合テストと単体テストを別のフォルダーに配置する必要があります。多くの場合、プログラマーはこれらの2種類のテストの間に明確な線を引かず、役立つ種類のテストを記述するだけです。しかし、統合テストはしばしば以下を含むため、遅くなる傾向があります。

  • データベースクエリ
  • ネットワークリクエスト
  • 時間依存の動作
  • 大量のデータ

対照的に、ユニットテストは高価な操作を模擬するため、ユニットテストはすぐに実行される傾向があります(実際、テストの実行で最も遅い部分は、多くの場合、テストフレームワーク自体です)。

プログラマーがシステムで作業しているときは、編集とテストのサイクルにあります。彼らがテストフィードバックをより早く取得し、サイクルが短いほど、生産性が向上します。そこで、重要なテストのみを実行して、短時間で完了したいと考えています。完全なテストスイートは、QAプロセスの一部としてのみ実行されます。 CIサーバー上。

これは、大規模なテストスイートを分類する必要があることを意味します。特定のコンポーネントの単体テストのみを選択できますか?遅いテストを除外できますか?これを行う簡単な方法の1つは、さまざまなディレクトリにさまざまなテストスイートを保持することです。テストが非常に少ない場合、プログラマーがテストのサブセットを簡単に選択できる限り、単一のディレクトリでも問題ありません。

プログラマーがフィードバックをすばやく受け取ることができるものは何でもいいです。最も包括的なテストスイートは、定期的に実行されなければ問題ではありません。

参考文献:

18
amon