testing-01jpcvxfxe99ev6x7f60xvbk8v.md•4.25 kB
---
description: testingに関するドキュメント
ruleId: testing-01jpcvxfxe99ev6x7f60xvbk8v
tags: ["development","layered-architecure"]
aliases: ["testing-strategy", "test-levels"]
globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.go", "**/*.rs", "**/*.scala"]
---
# レイヤーを考慮したテスト戦略
## テストレベル
### ユニットテスト
- **ドメイン層のテスト**。
- 値オブジェクト・エンティティのビジネスルールの検証。
- ドメインサービスのロジック検証。
- 不変条件の保証確認。
- **ユースケース層のテスト**。
- ビジネスフローの正確性確認。
- エッジケースと例外ハンドリングの検証。
- リポジトリインタフェースをモック化して外部依存を分離。
- **インフラストラクチャユーティリティのテスト**。
- 共通ユーティリティの機能検証。
- 設定管理機能の動作確認。
- 横断的関心事の検証。
### 結合テスト
- **コンポーネント間連携のテスト**。
- 複数のクラスやモジュール間の相互作用検証。
- インタフェース境界での連携確認。
- 依存コンポーネントとの整合性検証。
- **内部サブシステム間のテスト**。
- 機能グループ間の連携確認。
- モジュール境界を跨ぐデータフローの検証。
- 内部API・イベント伝搬の正確性確認。
- **実際のDBとの連携テスト**。
- Testcontainersを使用した実DBでのテスト実行。
- コンテナ化されたDBを一時的に起動してテスト。
- 実際のクエリとデータアクセスの検証。
- DBマイグレーションスクリプトの動作確認。
### 統合テスト
- **リポジトリ実装のテスト**。
- 実際のデータストアとの連携確認。
- トランザクション処理の検証。
- データマッピングの正確性確認。
- **複数層を横断するテスト**。
- ユースケース〜アダプタ層の連携検証。
- エンドツーエンドのフロー確認。
- 実際の外部依存との統合動作確認。
- **外部システム連携テスト**。
- 外部APIやサービスとの連携確認。
- 外部システムの振る舞いをシミュレートした検証。
- エラーハンドリングと回復メカニズムの確認。
## テスト設計原則
### BDDアプローチ
- **Given-When-Then** パターンでテストを記述。
- Given: テストの前提条件を設定。
- When: テスト対象の操作する。
- Then: 結果の検証。
### テストデータ管理
- **テストファクトリパターン**。
- 複雑なテストデータを簡潔に構築。
- テストデータ生成の再利用性を確保。
- **ビルダーパターン**。
- 柔軟なテストデータ構築。
- 読みやすく保守しやすいテストデータ定義。
## テスト戦略の効果
1. **品質の早期保証**。
- 基盤部分から検証することで、根本的な問題を早期発見。
- 下位レイヤーから確実に品質を確保。
2. **安全なリファクタリング**。
- 十分なテストカバレッジにより設計変更やコード改善を安全に実施。
- 変更による影響範囲を迅速に特定。
3. **生きたドキュメント**。
- テストコードが仕様を表現する生きたドキュメントとして機能。
- 期待される動作が明確に記述され、常に最新状態を維持。
4. **テスト可能な設計の実現**。
- 依存関係の明確な分離によりモックとスタブの効果的活用が可能。
- 外部依存から分離されたテストで安定したテスト環境を構築。
5. **保守性と拡張性の向上**。
- 責務に応じたテスト戦略により、部品の交換や機能拡張が容易。
- テスト駆動で設計改善を継続的に実施可能。
このテスト戦略は、アプリケーションの各層の責務を明確に保ちながら、システム全体の品質を確保するための体系的なアプローチを提供します。