最初に呼ばれた時は1, 2度目に呼ばれた時は2を返却するメソッドのスタブが欲しい場合。
$stub->method()->willReturn($value)
は $stub->method()->will(new ReturnPromise([$value]))
と同じ意味だけれど、ReturnPromiseのコンストラクタの引数は配列になっていて、複数の値を渡すことができる。これがそれぞれn回目に呼ばれた時の戻り値となるようだ(MockeryのandReturn(value1, value2, value3)
と同様)。
interface Sequence {
public function getValue();
}
class ReturnPromiseTest extends PHPUnit_Framework_TestCase
{
public function test()
{
$stub = $this->prophesize(Sequence::class);
$stub->getValue()->will(new \Prophecy\Promise\ReturnPromise([1, 2, 3]));
$this->assertEquals(1, $stub->reveal()->getValue());
$this->assertEquals(2, $stub->reveal()->getValue());
$this->assertEquals(3, $stub->reveal()->getValue());
}
}
追記
ReturnPromise
使わずにwillReturn
に複数の引数を渡すだけでよかった。
$stub->getValue()->willReturn(1, 2, 3);