--- name: generating-tests description: ユニットテスト、統合テスト、E2Eテストのコード生成を支援します。テスト設計、AAA パターン、テストシナリオを提供します。テストコード実装、テストカバレッジ拡大が必要な場合に使用してください。 disable-model-invocation: false --- # テストコード生成 ## 概要 テストコードの生成、テスト設計、品質メトリクス分析を包括的に支援するスキルです。 ## 実行フロー ### Step 1: テスト環境の確認 - `package.json` からテストフレームワークを特定(Jest, Vitest, pytest等) - 既存のテストファイルからプロジェクトのテストパターンを確認 - テスト設定ファイルを確認 ### Step 2: 対象コードの分析 - 関数/クラスのシグネチャを確認 - 依存関係を特定(モックが必要なもの) - エッジケースを洗い出し ### Step 3: テストケースの設計 #### 正常系 - 基本的な入力での期待される動作 - 複数の有効な入力パターン #### 異常系 - 無効な入力(null, undefined, 空文字, 不正な型) - エラーハンドリングの確認 - 例外がスローされるケース #### 境界値 - 最小値/最大値 - 空配列/空オブジェクト - 文字列の長さ制限 ### Step 4: テストコードの実装 **AAAパターン(Arrange-Act-Assert):** ```typescript test('ユーザー作成時にIDが割り当てられる', () => { // Arrange: テストデータを準備 const userData = { name: 'Test User' }; // Act: 対象の動作を実行 const user = createUser(userData); // Assert: 結果を検証 expect(user.id).toBeDefined(); }); ``` ### Step 5: テスト実行戦略 **段階的なテスト実行:** 1. 変更モジュールのテストのみ実行(高速フィードバック) 2. 関連する統合テストを実行 3. フルテストスイートを実行(最終確認) **実行時間目標:** - ユニットテスト: <100ms - 統合テスト: <1s ### Step 6: テスト失敗時の分析 **失敗分析プロトコル:** 1. **コードのバグ** → コードを修正 2. **正当な挙動変更** → テスト期待値を更新 3. **脆いテスト** → テストをリファクタ 4. **環境問題** → 設定やセットアップを修正 ### Step 7: 品質メトリクス **Test Health Metrics:** ``` Pass Rate: >95% (green) Flaky Rate: <1% (green) Coverage: >80% (green) ``` **フレーキーテスト対処:** - タイミング問題: 適切なwait/mocksを追加 - テスト分離: 各テスト前後に状態をクリーンアップ - 外部依存: モックまたはスタブを使用 ## モック/スタブの方針 | 対象 | 方針 | | -------------------- | -------------------- | | 外部API呼び出し | モック必須 | | データベース | モックまたはテスト用DB | | ファイルシステム | モック推奨 | | 日時 | 固定値にモック | | 乱数 | シード固定またはモック | ## フレームワーク固有のガイダンス ### JavaScript/TypeScript - **Jest**: `describe`, `test/it`, `expect`, `beforeEach/afterEach` - **Vitest**: Jest互換 + Viteの高速性 - **Testing Library**: ユーザー視点のテスト ### Python - **Pytest**: `def test_*`, `assert`, `@pytest.fixture` - **unittest**: `TestCase`, `self.assert*` ### その他 - **Go**: `testing` package, `testify` - **Ruby**: RSpec, Minitest - **Java**: JUnit, Mockito ## ベストプラクティス 1. **振る舞いをテスト**: 実装詳細ではなく外部から見た動作 2. **AAAパターン**: Arrange-Act-Assertで構造化 3. **高速に保つ**: ユニット<100ms、統合<1s 4. **テストデータファクトリ**: 一貫性のあるテストデータ 5. **ドキュメントとして機能**: テスト名で仕様が理解できる ## 目標 実バグを捉えつつ変更に安心感を与える健全で信頼性の高いテストスイートを作成・維持すること。 ## 関連ファイル - [PATTERNS.md](./PATTERNS.md) - テストパターン集 - [METRICS.md](./METRICS.md) - 品質メトリクスリファレンス