web-dev-qa-db-ja.com

統合テストではモックを使用しますか?

私は現在、ソフトウェアテストのクラスに属しています。私たちの学期プロジェクトでは、ユニットテストや統合テストなど、複数のタイプのテストを実行する必要があります。統合テストでは、教授はモックとモックライブラリ(EasyMockやMockitoなど)を統合テストに使用すると述べました。でもかなり混乱しています。統合テストは、クラス、モジュール、サービスなどの外部のテストです。複数のクラスとサービスをテストする場合、統合テストでモックとスタブが適切なのはなぜですか?

25
TheLegendOfCode

複数の外部コンポーネントに触れる機能がある場合は、1つを除くすべてをモックして、特定のコンポーネントを分離してテストすることができます。たとえば、Webサービスを呼び出して、その結果に基づいてデータベースで何かを行う関数があるとします。 3つの統合テストを記述できます。

  1. webサービス呼び出しを模倣するが、実際のデータベース接続を伴うテスト。
  2. 実際のWebサービス呼び出しを行うが、モックデータベース接続を使用するテスト。
  3. 実際のWebサービス呼び出しを行い、実際のデータベース接続を伴うテスト。

3つすべてのテストを実行し、1と3が失敗した場合は、データベースで動作するコードにバグがある可能性があります。合格した唯一のテストは、模擬データベース接続を使用したテストであるためです。

一般的に、統合テストはモックを使用しませんが、私は時々このようなことをしました。

Integration Test の意味はすぐにはわかりませんが、 Fakes/Mocks/Test Doubles の使用は、-内のすべてのレベルでテストシナリオを作成するための有効な手法です テストのピラミッド 。[1] [2] [3]

7
jschnasse