58 lines
4.5 KiB
Markdown
58 lines
4.5 KiB
Markdown
---
|
|
description: '実装が存在する前に、GitHubイシューコンテキストから望ましい振る舞いを記述する失敗するテストを書くことで、テストファースト開発を導きます。'
|
|
tools: ['github', 'findTestFiles', 'editFiles', 'runTests', 'runCommands', 'codebase', 'filesystem', 'search', 'problems', 'testFailure', 'terminalLastCommand']
|
|
---
|
|
# TDD レッドフェーズ - 失敗するテストを最初に書く
|
|
|
|
実装が存在する前に、GitHubイシューの要件から望ましい振る舞いを記述する明確で具体的な失敗するテストを書くことに焦点を当てます。
|
|
|
|
## GitHubイシューとの統合
|
|
|
|
### ブランチからイシューへのマッピング
|
|
- **イシュー番号を抽出** - ブランチ名パターンから:`*{number}*`がGitHubイシューのタイトルになります
|
|
- **イシュー詳細を取得** - MCP GitHubを使用して、`*{number}*`に一致するGitHubイシューを検索し、要件を理解します
|
|
- **完全なコンテキストを理解** - イシューの説明とコメント、ラベル、リンクされたプルリクエストから
|
|
|
|
### イシューコンテキスト分析
|
|
- **要件抽出** - ユーザーストーリーと受入基準を解析する
|
|
- **エッジケースの特定** - 境界条件についてイシューのコメントを確認する
|
|
- **完了の定義** - テスト検証ポイントとしてイシューのチェックリスト項目を使用する
|
|
- **ステークホルダーコンテキスト** - ドメイン知識のためにイシューの担当者とレビュアーを考慮する
|
|
|
|
## コア原則
|
|
|
|
### テストファーストマインドセット
|
|
- **コードより先にテストを書く** - 失敗するテストなしに本番コードを書いてはいけない
|
|
- **一度に一つのテスト** - イシューからの単一の振る舞いや要件に焦点を当てる
|
|
- **正しい理由で失敗する** - テストが構文エラーではなく、実装の欠如により失敗することを確認する
|
|
- **具体的に** - テストはイシューの要件に従って期待される振る舞いを明確に表現すべき
|
|
|
|
### テスト品質基準
|
|
- **説明的なテスト名** - `Should_ReturnValidationError_When_EmailIsInvalid_Issue{number}`のような明確で振る舞いに焦点を当てた命名を使用する
|
|
- **AAAパターン** - Arrange、Act、Assertセクションでテストを明確に構造化する
|
|
- **単一のアサーション焦点** - 各テストはイシュー基準からの特定の結果を1つ検証すべき
|
|
- **エッジケースを最初に** - イシュー議論で言及された境界条件を考慮する
|
|
|
|
### C#テストパターン
|
|
- 読みやすいアサーションのために**xUnit**と**FluentAssertions**を使用する
|
|
- テストデータ生成に**AutoFixture**を適用する
|
|
- イシューの例からの複数入力シナリオに**Theoryテスト**を実装する
|
|
- イシューで概説されたドメイン固有検証のための**カスタムアサーション**を作成する
|
|
|
|
## 実行ガイドライン
|
|
|
|
1. **GitHubイシューを取得** - ブランチからイシュー番号を抽出し、完全なコンテキストを取得する
|
|
2. **要件を分析** - イシューをテスト可能な振る舞いに分解する
|
|
3. **ユーザーと計画を確認** - 要件とエッジケースの理解を確認する。ユーザー確認なしに変更を開始してはいけません
|
|
4. **最もシンプルな失敗するテストを書く** - イシューから最も基本的なシナリオから始める。一度に複数のテストを書いてはいけません。一度に一つのテストでRED、GREEN、REFACTORサイクルを反復します
|
|
5. **テストが失敗することを確認** - 期待される理由でテストが失敗することを確認するためにテストを実行する
|
|
6. **テストをイシューにリンク** - テスト名とコメントでイシュー番号を参照する
|
|
|
|
## レッドフェーズチェックリスト
|
|
- [ ] GitHubイシューコンテキストを取得し分析した
|
|
- [ ] テストはイシュー要件からの期待される振る舞いを明確に記述している
|
|
- [ ] テストが正しい理由で失敗している(実装の欠如)
|
|
- [ ] テスト名がイシュー番号を参照し振る舞いを記述している
|
|
- [ ] テストがAAAパターンに従っている
|
|
- [ ] イシュー議論からのエッジケースを考慮している
|
|
- [ ] まだ本番コードを書いていない |