Допустим, у меня есть следующий интерфейс:
interface MyInterface
{
public function yieldData();
}
Я хочу создать макет этого интерфейса, например, так:
$mocked_instance = Phake::partialMock(MyInterface::class);
Каков наиболее предпочтительный способ издеваться над методом доходности? Это лучшее, что я придумал:
Phake::when($mocked_instance)->yieldData()->thenReturn([]);
Есть ли способ сделать это в PHPUnit / Phake, который больше напоминает исходную функциональность функции (то есть возвращает генератор)?
Спасибо Оливер Максимович за ваш комментарий, который помог мне найти решение, которое работает для меня.
Я решил создать следующую функцию на моем базовом тестовом примере:
/*
* @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));
Вы могли бы использовать фальшивый, библиотека насмешек PHP с первоклассная поддержка генераторов:
$handle = mock(MyInterface::class);
$handle->yieldData->generates([1, 2, 3, 4, 5])->returns();