Получение различных последовательных значений на php-издевательстве - PullRequest
1 голос
/ 06 марта 2019

TLDR; Как получить value1 в первый раз и value2 во второй раз при вызове издевательства shouldReceive('method) `с тем же параметром?

Допустим, у меня есть$order объект, который реализует эту подпись с помощью метода getState().

interface Order {
    public function getState();
}

Теперь, на модульных тестах, я хочу использовать насмешку, чтобы смоделировать объект $order, чтобы при вызове getState

  • 1-й раз он возвращается initialized значение
  • 2-й раз, когда возвращается processing значение

Ну, я знаю, что это могло быть сделано для случая, когда возвращаемое значение отличается на основе параметров, использующих ...->with($param1)->andReturn....

Плюс withConsecutive, кажется, способ сделать на phpunit.Как мне реализовать это на издевательстве?Я не смог найти ничего об этом ни на издевательском документе , ни на stackoverflow.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 06 марта 2019

Из раздела Объявление ожиданий возвращаемого значения :

Можно установить ожидание для нескольких возвращаемых значений.Предоставляя последовательность возвращаемых значений, мы сообщаем Mockery, какое значение возвращать при каждом последующем вызове метода:

$mock = \Mockery::mock('MyClass');
$mock->shouldReceive('name_of_method')
    ->andReturn($value1, $value2, ...)

Первый вызов вернет $ value1, а второй вызов вернет $ value2.

1 голос
/ 06 марта 2019

Я думаю, что это можно сделать с помощью array_shift внутри метода andReturnUsing издевательства

$orderStates = [
    'intially-order-was' => 'initialized',
    'then-order-becomes' => 'processing'
];

$order
    ->shouldReceive('getState')
    ->andReturnUsing(function() use (&$orderStates) {
        return array_shift($orderStates);
});
...