答えにジャンプする前に、私が何を意味するのかを定義しましょう (定義が異なる場合があることに注意してください。それは問題の一部ですが、これが私が使用しているものです)
モック テスト別名動作ベースのテスト--- コードが正しい動作をするかどうかをテストします。つまり、動作を検証するテストです。すべての協力者は嘲笑されます。
単体テスト--- システムの小さな部分 (クラスなど) に焦点を当てた低レベルのテスト。模擬テストを使用すると、共同作業者が嘲笑されます。
統合テスト--- システムの 2 つ以上の部分 (2 つのクラスなど) の相互作用をテストします。テスト対象のコンポーネントはモックされません。
システムテスト--- システムを「ブラックボックス」としてテストします。つまり、システムの内部にアクセスできないユーザーの視点からシステムをテストします。実際のコンポーネントが使用されます (データベース、http など)
私がゆっくりと認識しているのは、単体テストがこの方法で行われる場合、統合テストは必要ないかもしれないということです。
- 動作ベースの単体テストでは、コンポーネントが互いに正しく通信することを確認する必要があります
- システムテストは、実際のコンポーネントを使用してバグをキャッチする必要があります
統合テストは、システム テストが失敗した場合のオプションのトラブルシューティング ツールになります (よりきめ細かいため)。(ただし、時折発生する特殊なケースを除けば、適切なログを使用したシステム テストで十分であると主張するかもしれません。)
私は何が欠けていますか?
更新: 「十分」とは、これらの単体テスト + システム テストが、単体 + 統合 + システム テストで見つかるすべてのバグをキャッチすることを意味します。
更新: 「十分」とは、ユニット + 統合 + システム テストで検出され、ユニット + システム テストで検出されないバグがあることを意味しますか? 私が本当に探しているのは、統合テストが必要であることを示す例です。