tdd-with-phpunit について
tdd-with-phpunitは、PHPUnit 10または11を使うSymfony開発者向けのテストスキルです。アプリケーションの動作、コマンド、フォーム、外部サービス境界を対象とするRED-GREEN-REFACTORを案内し、出力要件とバージョン上の注意点も示します。
主な機能
- 01RED-GREEN-REFACTORワークフロー
- 02Symfonyのテスト基底クラス選定
- 03コマンドと無効なフォームのテスト
- 04外部サービスのテストダブルへの置き換え
- 05PHPUnit属性とバージョンの指針
活用シーン
- 01テスト駆動でSymfonyの機能を開発
- 02新しい動作に使うテストクラスの選定
- 03コンソールコマンドと422フォームのテスト
- 04テストコンテナ経由で外部サービスをモック
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ dev-toolings/ superpowers-symfony --skill tdd-with-phpunitインストール後、Claude Code で/tdd-with-phpunitを入力して読み込まれたか確認します。
同梱ファイルreference.md
詳細
PHPUnitを使ったTDD(Symfony)
使用する場面
- PHPUnit 10/11のクラスベーステストを使い、RED-GREEN-REFACTORで機能開発を進める場合。
- 新しい動作に対して、
TestCase、KernelTestCase、WebTestCaseのどれを使うか選ぶ場合。 - コンソールコマンドや、422を返す必要がある無効なフォームをテストする場合。
- テストコンテナを通じて、外部サービスをテストダブルに置き換える場合。
デフォルトのワークフロー
- RED:ベースクラスを選び、
#[Test]、#[DataProvider]、#[CoversClass]を使ってテストを書き、実行して適切な理由で失敗することを確認します。 - GREEN:テストを通過させる最小限のコードを書きます。
- テストスイートが成功している状態でREFACTORし、変更のたびに再実行します。
static::getContainer()->set(Service::class, $mock)で外部との境界を置き換えます。CommandTesterを使ってコマンドをテストするか、Symfony 8.1以降ではrunCommand()とassertCommandIsSuccessful()を使います。- 無効なフォーム送信は
assertResponseIsUnprocessable()で検証します。
ガードレール
@testや@dataProviderアノテーションではなく、PHPUnit 10以降の属性を使用します。- サービスの取得には
static::getContainer()を使い、従来のself::$containerは使いません。 - 実際の外部との境界(HTTPクライアント、サードパーティSDK)のみをモックし、それ以外では実際のサービスと実際のデータベースを使用します。
runCommand()とgetContainer()->set()内のクロージャにはSymfony 8.1以降が必要です。
段階的な情報開示
- 実行方針とリスク管理には、このファイルを使用します。
- 実装の詳細が必要な場合は、リファレンスを参照します。
出力の要件
- PHPUnitの失敗出力(RED)、続いて成功した実行結果。
- 変更したテストファイルと、使用したベースクラスおよび属性。
- 実行したコマンド。
参考資料
reference.md
コメント
Markdown 対応