mcpField
T
test-doubles-mocking

test-doubles-mocking

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

test-doubles-mocking について

test-doubles-mockingは、協力オブジェクトを分離して相互作用を検証するSymfony向けテストスキルです。dummy、stub、mock、spy、fakeの選び方と使い方を案内し、過剰なモック化を避けます。

主な機能

  1. 01テスト目的に応じたテストダブルの選択
  2. 02PHPUnitでのstubとmockの作成
  3. 03重要な呼び出しやメッセージの検証
  4. 04戻り値、例外、コールバックの設定
  5. 05インメモリリポジトリfakeの作成

活用シーン

  1. 01外部サービスに依存するコードのテスト
  2. 02永続化やメッセージ送信の検証
  3. 03インメモリリポジトリ実装の用意

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/dev-toolings/superpowers-symfony --skill test-doubles-mocking

インストール後、Claude Code で/test-doubles-mockingを入力して読み込まれたか確認します。

同梱ファイルreference.md

詳細

テストダブルによるモック(Symfony)

使用する場面

  • テスト対象のクラスが、決済ゲートウェイやメッセージバスなど、処理が遅い、外部に依存する、または非決定的なコラボレーターに依存している場合。
  • persist() や flush() の呼び出し、またはメッセージのディスパッチなど、インタラクションを検証する必要がある場合。
  • リポジトリのインターフェースを実装するインメモリのフェイクが必要な場合。
  • ダミー、スタブ、モック、スパイ、フェイクのどれを選ぶか判断する場合。

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

  1. 必要に応じてダブルを選びます。値を与えるにはスタブ、呼び出しを検証するにはモック、簡易版として動作する実装にはフェイクを使います。
  2. $this->createMock(Interface::class) で作成し、->method('charge')->willReturn(...) でスタブを設定します。
  3. インタラクションが重要な場合にのみ検証します。expects($this->once())->with(...) を使うか、$this->callback() でディスパッチされたメッセージを調べます。
  4. willReturnOnConsecutiveCalls()、willThrowException()、または willReturnCallback() で動作を設定します。
  5. リポジトリには、インターフェースを実装する InMemory フェイクを作成します。
  6. プロジェクトがすでに Prophecy に依存している場合に限り、ProphecyTrait と prophesize()、reveal() を使用します。

ガードレール

  • テスト対象のクラスをモックしてはいけません。部分モック(onlyMethods())は最後の手段です。
  • 具象クラスではなく、インターフェースをモックします。
  • モックよりスタブを優先し、テストごとにモックのアサーションは1つにします。
  • 過剰にモックしてはいけません。データベースにアクセスする動作は、実際のリポジトリを使った機能テストで検証します。

段階的な情報開示

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

出力要件

  • 各コラボレーターに選んだダブルの種類と、その理由。
  • 重要なものに限定した、検証対象のインタラクション。
  • 追加したフェイクがあれば、tests/Fake の下に配置します。

リファレンス

  • reference.md

コメント