PHP Prophecy でテスト対象のメソッド内で、同じメソッドが複数回呼ばれている場合の書き方

Prophecy を使ってテストを書く時に、テスト対象のメソッド内で同一メソッドが複数回呼ばれるが、引数がそれぞれ違う場合の書き方です。

例えばテスト対象のメソッドが以下のような場合

public sayHoge($message): string
{
    $a = $this->foo->sayFoo($message);
    $b = $this->foo->sayFoo('second' . $message);
    return $a . $b;
}

sayFoo は一回目と二回目で引数と戻り値が異なります。

この部分をモックしたい場合、テストコード側で以下のように二つ定義してあげれば大丈夫です。

$sut = new Hoge($foo->reveal());

$foo->sayFoo('1234')->willReturn('foo1234');
$foo->sayFoo('second1234')->willReturn('foosecond1234');

どうやらメソッドの引数でどのモックを使うかをマッチングをしてくれるようなので、上記のように同じsayFooに対して異なる引数のものを複数定義できるみたいです。

PHP

Posted by たみぼうず