自動テストはユニット(unit)、統合(integration)、エンドツーエンド(end-to-end、E2E)に分類され、システムの異なるレベルでの検証を包括的にカバーします。
背景: この分類は、アプリケーションを部分的にだけでなく全体としてもテストする必要があるために登場しました。したがって、テスト層が区別されます:
問題: バグはしばしば単純なメソッドのロジックだけでなく、コンポーネント間の接続部分や、外部サービスと一緒にシステム全体を「実際」に起動する際にも発生します。すべてを一緒にしてしまうと、バグのローカライズが難しく、どこで発生しているのかがわかりにくくなります。
解決策:
テストのタイプを区別することは、生存にとって必要不可欠です:
重要な特徴:
統合テストを単に「大きな」ユニットテストと見なすことはできますか?
いいえ、統合テストは複数のコンポーネントの連携をテストし、単一の機能だけではありません。それに、常にモックを使用できるわけではなく、実際のサービス同士が相互に作用しています。
すべてのテストはエンドツーエンド(E2E)であるべきですか?
いいえ、それは高価で複雑なアプローチです。E2Eは重要なユーザーシナリオにのみ必要であり、ほとんどのロジックは他のテストでカバーされます。
ユニットテストは常に迅速ですか?
必ずしもそうではありません。コードを孤立させることができない場合や、メソッドが複雑な外部リソースに依存する場合があります。そのような場合、テストはユニットでなくなります。
会社は主な機能をE2Eテストでカバーしました — 各修正は夜間にチェックされ、テストは不安定に落ち、バグは遅れて発見されました。
利点:
欠点:
チームはテストピラミッドを構築しました:下 — ユニットテスト、中間 — 統合テスト、上 — 最も重要なE2Eのみ。
利点:
欠点: