Получение разных последовательных значений при насмешке над php

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

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

interface Order {
    public function getState();
}

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

  • 1-й раз он возвращает значение initialized
  • 2-й раз он возвращает значение processing

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

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

Спасибо.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
1 183
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Думаю, это можно сделать с помощью метода 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);
});

Ну, это работает для меня, но я не уверен, правильно ли это или есть лучший способ. Пожалуйста, дайте мне знать, если это неправильно. :)

Bikal Basnet 06.03.2019 16:52

Что ж, этот мой ответ был слишком продуманным :) Думаю, я использовал дополнительный мозг. Ответ @Matteo - правильный ответ. stackoverflow.com/a/55027266/1818631

Bikal Basnet 06.03.2019 17:03
Ответ принят как подходящий

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

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 Это ответ. Должно быть, я внимательно изучил документ, мой плохой.

Bikal Basnet 06.03.2019 17:01

Другие вопросы по теме