В чистом насмешке PHPUnit я могу сделать что-то вроде этого:
$mock->expects($this->at(0))
->method('isReady')
->will($this->returnValue(false));
$mock->expects($this->at(1))
->method('isReady')
->will($this->returnValue(true));
Я не смог сделать то же самое, используя Пророчество. Является ли это возможным?
Ты можешь использовать:
$mock->isReady()->willReturn(false, true);
Видимо это не задокументировано (см. https://gist.github.com/gquemener/292e7c5a4bbb72fd48a8).
Есть еще одно документированный способ сделать это. Если вы ожидаете другого результата при втором вызове, это означает, что между ними что-то изменилось, и вы, вероятно, использовали установщик для изменения состояния объекта. Таким образом, вы можете сказать своему макету возвращать определенный результат после вызова метода установки с определенным аргументом.
$mock->isReady()->willReturn(false);
$mock->setIsReady(true)->will(function () {
$this->isReady()->willReturn(true);
});
// OR
$mock->setIsReady(Argument::type('boolean'))->will(function ($args) {
$this->isReady()->willReturn($args[0]);
});
Подробнее об этом здесь https://github.com/phpspec/prophecy#method-prophecies-idempotency.