Test-Driven Development
鉄則
テストを先に書く。実装コードを書く前にユーザー確認。
RED-GREEN-REFACTOR
- RED: 失敗するテストを書く → ユーザー確認
- GREEN: 最小限の実装でテストを通す
- REFACTOR: テストを維持しながら改善
テストなしの実装 → コード削除。やり直し。
実践テクニック (t-wada流)
- 小さなステップ: 1つずつテストを書く (複数同時禁止)
- 仮実装: テストを通すためにベタ書き (
return 42) でもOK - 三角測量: 2つ目のテストケースで一般化する
- 明白な実装: 答えが分かる場合は直接実装してもOK
テストコード変更の制限
テストは仕様。勝手に変更禁止。
許可される例外: テスト追加/修正の依頼、明らかな構文エラー、仕様矛盾 (要確認)
Testing Trophy
優先順位: 統合テスト > ユニットテスト > E2E
コミットルール
- RED:
test: add failing test for [feature] - GREEN:
feat: implement [feature] to pass test - REFACTOR:
refactor: [description] - テストが通ったらすぐコミット (小さく頻繁に)
AI生成テストの罠
- [ ] テストは要件に基づいているか? (AIの実装仮定ではないか)
- [ ] 境界値・異常系・null/空文字列のケースは含まれているか?
- [ ]
expect(result).toBeDefined()だけで終わっていないか? - [ ] モックが本物の振る舞いと乖離していないか?
対策: テストを書く前にテストケースを言語化。AI生成テストは必ずレビュー。REDで本当に失敗するか確認。
禁止事項
- テストを書かずに実装する
- テストを実装に合わせる (逆)
- テストデータ依存の条件分岐
- 複数テストケースを1つのitに
- 既存テストの無断変更・削除