mcpField
T
tdd-with-phpunit

tdd-with-phpunit

github.com/dev-toolingsテスト・品質227102 回インストール3 週間前に更新
リポジトリ

tdd-with-phpunit について

tdd-with-phpunitは、PHPUnit 10または11を使うSymfony開発者向けのテストスキルです。アプリケーションの動作、コマンド、フォーム、外部サービス境界を対象とするRED-GREEN-REFACTORを案内し、出力要件とバージョン上の注意点も示します。

主な機能

  1. 01RED-GREEN-REFACTORワークフロー
  2. 02Symfonyのテスト基底クラス選定
  3. 03コマンドと無効なフォームのテスト
  4. 04外部サービスのテストダブルへの置き換え
  5. 05PHPUnit属性とバージョンの指針

活用シーン

  1. 01テスト駆動でSymfonyの機能を開発
  2. 02新しい動作に使うテストクラスの選定
  3. 03コンソールコマンドと422フォームのテスト
  4. 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を返す必要がある無効なフォームをテストする場合。
  • テストコンテナを通じて、外部サービスをテストダブルに置き換える場合。

デフォルトのワークフロー

  1. RED:ベースクラスを選び、#[Test]、#[DataProvider]、#[CoversClass]を使ってテストを書き、実行して適切な理由で失敗することを確認します。
  2. GREEN:テストを通過させる最小限のコードを書きます。
  3. テストスイートが成功している状態でREFACTORし、変更のたびに再実行します。
  4. static::getContainer()->set(Service::class, $mock)で外部との境界を置き換えます。
  5. CommandTesterを使ってコマンドをテストするか、Symfony 8.1以降ではrunCommand()とassertCommandIsSuccessful()を使います。
  6. 無効なフォーム送信はassertResponseIsUnprocessable()で検証します。

ガードレール

  • @testや@dataProviderアノテーションではなく、PHPUnit 10以降の属性を使用します。
  • サービスの取得にはstatic::getContainer()を使い、従来のself::$containerは使いません。
  • 実際の外部との境界(HTTPクライアント、サードパーティSDK)のみをモックし、それ以外では実際のサービスと実際のデータベースを使用します。
  • runCommand()とgetContainer()->set()内のクロージャにはSymfony 8.1以降が必要です。

段階的な情報開示

  • 実行方針とリスク管理には、このファイルを使用します。
  • 実装の詳細が必要な場合は、リファレンスを参照します。

出力の要件

  • PHPUnitの失敗出力(RED)、続いて成功した実行結果。
  • 変更したテストファイルと、使用したベースクラスおよび属性。
  • 実行したコマンド。

参考資料

  • reference.md

コメント