テストの流れ
- 単体テスト(Unit Test)
├ サービス層テスト(Service Test)
└ コントローラーテスト(Controller Test) - 結合テスト(Integration Test)
- E2Eテスト(End-to-End Test)
テストピラミッドでは、下のレイヤーほどテスト数が多くなる構造が推奨されています。
一般的な目安として、
- E2Eテスト:1割
- 結合テスト:2割
- 単体テスト:7割
程度のバランスになることが多いとされています。
E2Eテストは実行コストが高く不安定になりやすいため、できるだけ 下のレイヤー(単体テスト)で問題を検出する ことが望ましいとされています。
1. 単体テスト
単体テストでは、サービス層テストやコントローラーテストなど、アプリケーションを構成するクラス単位で動作を検証します。
ビジネスロジックやHTTP処理を個別に確認し、問題を早い段階で検出することが目的です。
サービス層テスト
サービス層テストでは、アプリケーションのビジネスロジックをテストします。
入力に対して正しい計算や処理結果が返るかを確認し、外部依存(Repositoryなど)はモックを使用して分離して検証することが一般的です。
コントローラーテスト
コントローラーテストでは、HTTPリクエストに対するレスポンスの挙動を確認します。
主にエンドポイントのマッピング、HTTPステータス、レスポンス形式(JSONなど)、バリデーションの動作を検証します。
2. 結合テスト
結合テストでは、複数のコンポーネントを組み合わせた動作を確認します。
例えば Controller・Service・Repository・DB などを実際に連携させ、アプリケーションの処理フローが正しく動くかを検証します。
3. E2Eテスト
E2E(End-to-End)テストでは、ユーザー操作を想定したシステム全体の動作を確認します。
フロントエンドとバックエンドを含めた実際のアプリケーション環境で、ブラウザ操作やAPIリクエストを通して処理が正しく完了するかを検証します。
例えば、ログインやデータ登録などの一連の操作を実行し、ユーザー視点でシステム全体が正常に動作するかを確認します。
まとめ
バックエンドのテストは、単体テスト・結合テスト・E2Eテストといったレイヤーごとに役割を分けて実施します。
テストピラミッドの考え方に基づき、単体テストを中心に多く書き、結合テストや E2Eテストは必要最小限にすることで、効率的に品質を担保できます。