| name | vk-add-phpunit |
| description | PHPUnit テストを追加・更新する。引数で対象の関数・メソッドを指定できる(任意。省略時は git diff から変更箇所を自動検出) |
PHPUnit テスト追加
ルール
まず Read ツールで以下のルールファイルを読む:
タスク
テスト対象: $ARGUMENTS
以下の手順でPHPUnitテストを作成してください。
1. 対象の特定
$ARGUMENTS が指定されている場合: その関数・メソッドのみを対象とする。
$ARGUMENTS が空の場合: git diff から自動検出する。
ベースブランチは以下の優先順で検出し、最初に存在するものを使う:
main
origin/main
master
origin/master
いずれも存在しない場合は git branch -r で利用可能なリモートブランチを確認し、適切なベースブランチをユーザーに尋ねて終了する。
ベースブランチが確定したら以下を実行する:
git diff <ベースブランチ>...HEAD -- '*.php'
差分の変更ハンク全体(+/- 行およびコンテキスト行)から、そのハンクが属する関数・メソッド宣言を特定して対象リストを作る(新規追加・既存更新の両方を対象とする)。
関数の特定方法: 変更ハンク内の行から、直近の function 宣言まで遡る。
対象の関数・メソッドは既存テストがあっても除外せず、以下の観点で diff を確認する:
- 引数の増減・変更がある → テストケースの更新・追加が必要
- 処理の条件分岐が変わっている → 新しい条件に対応するケースの追加が必要
- 返り値の仕様が変わっている → 期待値の見直しが必要
- 軽微な内部実装の変更のみで外部仕様が変わっていない → 対応不要
対象が複数ある場合は全てにテストを追加・更新する。対象が1件もなく、全変更が対応不要と判断した場合は、その旨をユーザーに伝えて終了する。
対象コードを Grep/Glob/Read で検索し、以下を把握する:
- 関数・メソッドの定義場所(ファイルパス・行番号)
- 引数・返り値の型と仕様
- 依存するオプション、メタ、グローバル変数など
2. 既存テストファイルの確認
プロジェクト内の tests/ または test/ ディレクトリを探し、対象クラスに対応する既存テストファイルを確認する。
- 存在する場合: そのファイルを Read で読み込み、既存テストに追記する
- 存在しない場合: 適切なパスに新規テストファイルを作成する
3. テストの作成
上記ルール(rules/testing/phpunit.md)に従ってテストを作成する。
実際のコードを Read で読んでから、実際に起こりうる条件(境界値、特殊ケースなど)をテストケースに含める。
4. 注意事項
- コード生成後に changelog は更新しない(テストコードはエンドユーザーに影響しないため)
失敗時の対応
途中で行き詰まった場合は、推測で代替手段を取らず以下を確認し、解決できなければユーザーにエスカレーションする。
- ベースブランチ検出が全滅(
main/origin/main/master/origin/master がいずれも無い): 推測で別ブランチを使わず、git branch -r の結果を添えてどのブランチを基準にするかユーザーに確認して終了する。
- git 操作自体がエラー(git リポジトリでない・
git diff が異常終了など): 実行したコマンドとその出力を添えてユーザーにエスカレーションする。自前で git init 等の修復を試みない。
- 対象関数が特定できない(diff から宣言を遡れない・定義箇所を Read できない): 推測で広範囲にテストを書かず、対象が曖昧である旨と該当箇所をユーザーに確認する。