модульное тестирование — макетирование функции, которая возвращает генератор в PHP с помощью PHPUnit / Phake

Допустим, у меня есть следующий интерфейс:

interface MyInterface
{
public function yieldData();
}

Я хочу создать макет этого интерфейса, например, так:

$mocked_instance = Phake::partialMock(MyInterface::class);

Каков наиболее предпочтительный способ издеваться над методом доходности? Это лучшее, что я придумал:

Phake::when($mocked_instance)->yieldData()->thenReturn([]);

Есть ли способ сделать это в PHPUnit / Phake, который больше напоминает исходную функциональность функции (то есть возвращает генератор)?

6

Решение

Спасибо Оливер Максимович за ваш комментарий, который помог мне найти решение, которое работает для меня.

Я решил создать следующую функцию на моем базовом тестовом примере:

/*
* @param array @array
*
* @return \Generator|[]
*/
protected function arrayAsGenerator(array $array)
{
foreach ($array as $item) {
yield $item;
}
}

Это позволяет мне сделать следующее:

$mocked_instance = Phake::partialMock(MyInterface::class);

$numbers = [1, 2, 3, 4, 5];

Phake::when($mocked_instance)
->yieldData()
->thenReturn($this->arrayAsGenerator($numbers));
3

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

Вы могли бы использовать фальшивый, библиотека насмешек PHP с первоклассная поддержка генераторов:

$handle = mock(MyInterface::class);
$handle->yieldData->generates([1, 2, 3, 4, 5])->returns();
0

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