generate-tests について
generate-testsは、対象コードを分析してユニットテストを作成するスキルで、Javaプロジェクト向けの指針を詳しく備えています。依存関係と既存テストを調べ、分岐を整理したうえで、テストをコンパイルして実行します。
主な機能
- 01プロジェクト規則と依存ソースの確認
- 02既存テストと慣例の確認
- 03コード分岐を踏まえたケース設計
- 04Javaの型に応じたテスト生成
- 05生成テストのコンパイルと実行
活用シーン
- 01Javaクラスやメソッドへのテスト追加
- 02既存テストクラスの拡張
- 03プロジェクトのビルドで生成テストを検証
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ mavka-ai/ unit-tests-skills --skill generate-testsインストール後、Claude Code で/generate-testsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
rules/tests/general/cleanly-create-test-data.mdcode-context-analysis.mdexisting-test-awareness.mdgeneral-principles.mdkeep-cause-effect-clear.mdkeep-tests-focused.mdnaming-conventions.mdno-logic-in-tests.mdprefer-public-apis.mdtechnology-stack-detection.mdtest-behaviors-not-methods.mdtest-case-generation-strategy.mdverify-relevant-arguments-only.mdwhat-makes-good-test.mdrules/tests/java/unit/argument-matching.mdcontroller-test-rules.mddomain-service-rules.mdjava-test-template.mdjson-serialization.mdlogging-rules.mdrules/tests/post-generation/compilation-verification.mdtest-execution-verification.md詳細
テスト生成スキル
コードを分析し、指定された対象に対する高品質なユニットテストを生成します。
テスト対象: $ARGUMENTS
品質基準
- テストケースを生成する前に、時間をかけてコードを十分に分析してください。
- 速度よりも品質を重視してください。関連するすべてのソースファイルとルールを注意深く読んでください。
- 以下のワークフローの手順を省略しないでください。各手順には理由があります。
- テストデータで手を抜かないでください。実際のクラスを読み、正しいコンストラクターとフィールドを使用してください。
手順
手順 1:ルールを読み、コンテキストを分析する
- コードの種類に基づいて、
./rules/tests/にある関連ルールを読む(「ルールの参照」を参照) - 対象のソースファイル/クラス/メソッドを読む
- 依存関係を読む:対象が参照する DTO、エンティティ、列挙型、カスタム例外、その他の型を読み込むため、インポートをたどる(
code-context-analysisルールで指定されているとおり) - 既存のテストを確認する:テストディレクトリ内で
{ClassName}Testまたは{ClassName}Testsを検索する(existing-test-awarenessルールで指定されているとおり)- 見つかった場合は、すべて読んでください。新しいファイルを作成するのではなく、不足しているテストを追加します
- 見つからない場合は、プロジェクトの規約を把握するため、近くにあるテストクラスを 2~3 個調べてください
手順 2:テストケースの一覧を作成する
この対象のテストケース一覧がすでにある場合 — ユーザーまたはエージェントのどちらが実行したかにかかわらず、generate-test-cases が先に実行されています。その一覧を計画として使用し、そこからテストを生成してください。対象コードを最初から分析し直してはいけません。コードを読んだ結果、一覧と異なる場合は、追加または削除するケースとその理由を明記し、計画の変更が分かるようにしてください。
そのような一覧がない場合は、テストコードを書く前に、ここで作成してください。
- 以下を含む、コード内のすべての分岐を分析します。
- 成功パス
- エラー/例外パス
- バリデーションロジック
- 対象から呼び出される private/protected メソッド
- セキュリティアノテーション(存在する場合)
- INCLUDE/EXCLUDE ルールを厳密に適用します
- 以下の形式で一覧を出力します
どちらの場合も、続けて手順 3 に進んでください。一覧は、生成されたテストと計画をユーザーが後から照合できるように表示します。最初から最後まで、実行は無人で続行されます。
テストケースの出力形式
## Test Cases for {ClassName}.{methodName}
### 1. {testMethodName}
- **Given:** {preconditions/input state}
- **When:** {action being tested}
- **Then:** {expected outcome}
- **Code branch:** {which code path this covers}
### 2. {testMethodName}
...
命名規則
テストメソッド名の形式:{testedMethod}_{givenState}_{expectedOutcome}
例:
calculateTotal_validProducts_returnsSumcalculateTotal_emptyList_throwsIllegalArgumentExceptiongetUser_unauthorized_returns401
手順 3:テストコードを生成する
- コードの種類を判定し、該当するルールを適用します。
- コントローラー →
controller-test-rules.mdを適用(@WebMvcTestと MockMvc のパターンを使用) - サービス/ドメインロジック →
domain-service-rules.mdを適用(@ExtendWith(MockitoExtension.class)と Mockito のパターンを使用) - リポジトリ/メッセージング/その他の型 → 基本ルールとして
domain-service-rules.mdを適用します。型固有のルールはまだないことをユーザーに伝えてください - すべての Java コード → コードの種類にかかわらず、常に
java-test-template.md、argument-matching.md、json-serialization.mdを適用します
- コントローラー →
- 手順 1 で既存のテストクラスが見つかった場合は、新しいテストメソッドを追加します(重複するファイルは作成しないでください)
- すべてのルールと手順 2 のテストケースに従ってテストを生成します
- Write ツールを使用してテストファイルを作成または更新します
手順 4:コンパイルと実行を検証する
- コンパイルを実行し、問題を修正します(最大 5 回。
compilation-verification.mdを参照) - 生成したテストクラスを実行し、すべてのテストがパスすることを検証します(
test-execution-verification.mdを参照) - テストが失敗した場合は、テストを変更して修正します。本番コードはそのままにします
- 3 回試しても修正できないテストはファイルに残し、理由を添えて
@Disabledにし、その旨を報告します(test-execution-verification.mdを参照)
トラブルシューティング
対象ファイルが見つからない場合
指定された対象が存在しない場合は、検索した正確なパスをユーザーに伝え、確認を求めてください。
サポートされていない言語
対象のコードが個別のルールが定められていない言語(Java 以外)の場合は、一般ルールのみを適用し、言語固有の慣習については手作業で確認が必要になる可能性があることをユーザーに伝えてください。
コンパイルが繰り返し失敗する場合
5 回試行してもコンパイルに失敗する場合:
- 中止し、残っているエラーをユーザーに示します
- 考えられる原因(依存関係の不足、互換性のないバージョン)を提案します
- 続行する前に、ビルドの問題を解決するようユーザーに依頼します
本番コードの動作が原因でテストが失敗する場合
本番コードの動作が想定と異なるためにテストが失敗する場合:
- 本番コードは変更しないでください
- 実際の動作に合わせてテストを修正します
- 動作にバグがあると思われる場合は、コメントを追加します:
// NOTE: current behavior may be a bug — {description}
例
User says: "/generate-tests src/main/java/com/example/service/OrderService.java"
Step 1: Agent reads rules, reads OrderService.java, reads OrderRequest.java,
Order.java, OrderRepository.java (dependencies), checks for
existing OrderServiceTest.java
Step 2: Agent outputs 7 test cases covering:
- createOrder success path
- createOrder with invalid request (validation)
- processPayment success
- processPayment failure
- calculateTotal with products
- calculateTotal with empty list
- cancelOrder for non-existent order
Step 3: Agent generates OrderServiceTest.java with @ExtendWith(MockitoExtension.class),
mocked repository and payment service, 7 test methods.
Step 4: Agent runs `mvn test -Dtest=OrderServiceTest -q`, all tests pass.
Result: Complete test file delivered with 7 passing tests.
ルールの参照
重要:./rules/tests/ ディレクトリにある、関連するすべてのルールを必ず読み、適用してください。
メンテナンスに関する注意:
./rules/tests/general/の一般ルールは、generate-test-casesスキル(rules/general/にコピーがあります)と共有されています。ルールを更新する際は、両方の場所を同期してください。
一般ルール(常に適用)
general/test-case-generation-strategy.md- 対象に含める/除外する基準general/naming-conventions.md- テストの命名形式general/general-principles.md- テストの基本原則(Given-When-Then、実際値/期待値)general/technology-stack-detection.md- 言語とフレームワークの検出general/what-makes-good-test.md- 明確さ、完全性、簡潔さ、堅牢性general/cleanly-create-test-data.md- テストデータにはヘルパーとビルダーを使用general/keep-cause-effect-clear.md- 原因の直後に結果を記述general/no-logic-in-tests.md- DRY より KISS を優先し、アサーション内のロジックを避けるgeneral/keep-tests-focused.md- 1 つのテストにつき 1 つのシナリオgeneral/test-behaviors-not-methods.md- 動作ごとにテストを分けるgeneral/verify-relevant-arguments-only.md- 関連するモック引数のみを検証general/prefer-public-apis.md- private メソッドより public API をテストgeneral/existing-test-awareness.md- 既存のテストを確認し、プロジェクトの慣習に合わせるgeneral/code-context-analysis.md- テストを作成する前に依存関係を読む
Java のユニットテスト
java/unit/java-test-template.md- 基本テンプレート、使用禁止のアノテーションjava/unit/json-serialization.md- 明示的な JSON リテラルを使用java/unit/argument-matching.md-any()ではなくArgumentCaptorを使用java/unit/logging-rules.md- ログにはOutputCaptureExtensionを使用java/unit/domain-service-rules.md- サービス向けの Mockito パターンjava/unit/controller-test-rules.md- コントローラー向けの@WebMvcTestとMockMvcのパターン
生成後
post-generation/compilation-verification.md- コンパイルを検証post-generation/test-execution-verification.md- テストの成功を検証