TLDR;
Как получить value1 в первый раз и value2 во второй раз при вызове издевательства shouldReceive('method)` с одним и тем же параметром?
Допустим, у меня есть объект $order, который реализует эту подпись с помощью метода getState().
interface Order {
public function getState();
}
Теперь, в модульных тестах, я хочу использовать насмешку, чтобы смоделировать объект $order, чтобы при вызове getState
initializedprocessingНу, я знаю, что это можно было бы сделать для случая, когда возвращаемое значение отличается в зависимости от параметров, используя ...->with($param1)->andReturn....
Плюс withConsecutive, похоже, это то, что нужно делать на phpunit. Как мне реализовать это на издевательстве? Я ничего не нашел об этом ни в насмешливый док, ни в stackoverflow.
Спасибо.






Думаю, это можно сделать с помощью метода array_shift inside mockery's andReturnUsing
$orderStates = [
'intially-order-was' => 'initialized',
'then-order-becomes' => 'processing'
];
$order
->shouldReceive('getState')
->andReturnUsing(function() use (&$orderStates) {
return array_shift($orderStates);
});
Что ж, этот мой ответ был слишком продуманным :) Думаю, я использовал дополнительный мозг. Ответ @Matteo - правильный ответ. stackoverflow.com/a/55027266/1818631
Из раздела Объявление ожиданий возвращаемого значения:
It is possible to set up expectation for multiple return values. By providing a sequence of return values, we tell Mockery what value to return on every subsequent call to the method:
$mock = \Mockery::mock('MyClass'); $mock->shouldReceive('name_of_method') ->andReturn($value1, $value2, ...)The first call will return $value1 and the second call will return $value2.
Спасибо @Matteo Это ответ. Должно быть, я внимательно изучил документ, мой плохой.
Ну, это работает для меня, но я не уверен, правильно ли это или есть лучший способ. Пожалуйста, дайте мне знать, если это неправильно. :)