Keanor
@Keanor
Ведущий разработчик

PHPUnit и генераторы?

Тестирую метод methodWithGenerator который возвращает генератор.

Как тестирую:
public function testMethodWithGenerator()
    {
        $dataSource = $this->getMockBuilder(DataSource::class)
            ->setMethods(['getSourceLocation'])
            ->getMock();
        $dataSource->expects($this->once())
            ->method('getSourceLocation')
            ->willReturn('asd');
        $dataSource->methodWithGenerator();
    }


Что тестирую:
public function methodWithGenerator()
    {
        $this->getSourceLocation();
        for ($i=0; $i<=2; $i++) {
            yield $i;
        }
    }


Получаю ошибку:
Expectation failed for method name is equal to when invoked 1 time(s).
Method was expected to be called 1 times, actually called 0 times.


Версия PHPUnit 5.3.2

Если yield заменить на return то тест проходит! Кто-нибудь сталкивался?
  • Вопрос задан
  • 662 просмотра
Решения вопроса 1
muhammad_97
@muhammad_97
PHP-разработчик
Все потому, что yield вощвращает не значение, а класс Generator: php.net/manual/ru/class.generator.php
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
Новые функции пока плохо перевариваются, попробуй (yield $i); или $i = (yield $i); , ну или аналог - класс Generator.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы