Как смоделировать один и тот же метод в Prophecy, чтобы он возвращал разные ответы при каждом вызове

В чистом насмешке PHPUnit я могу сделать что-то вроде этого:

$mock->expects($this->at(0))
->method('isReady')
->will($this->returnValue(false));

$mock->expects($this->at(1))
->method('isReady')
->will($this->returnValue(true));

Я не смог сделать то же самое, используя Пророчество. Является ли это возможным?

2

Решение

Ты можешь использовать:

$mock->isReady()->willReturn(false, true);

Видимо это не задокументировано (см. https://gist.github.com/gquemener/292e7c5a4bbb72fd48a8).

2

Другие решения

Есть еще одно документированный способ сделать это. Если вы ожидаете другого результата при втором вызове, это означает, что между ними что-то изменилось, и вы, вероятно, использовали установщик для изменения состояния объекта. Таким образом, вы можете сказать своему макету возвращать определенный результат после вызова метода установки с определенным аргументом.

$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.

1

По вопросам рекламы [email protected]