@Anton_O_B
PHP программист

PHPUnit сообщения об Exception в консоли — нормально ли?

Добрый день.

Подскажите, пожалуйста.
Вопрос возник на конкретном примере для Symfony, но вроде бы к фреймворку не привязан.

В тесте для контроллера хочу протестировать ответ для ситуации, когда один из внутренних сервисов, используемых контроллером выдает Exception. Т.е., например, сервис делает запрос к внешнему API, но возникла ситуация, когда данный API недоступен.

В тесте делаю так:
$serviceStub = $this->createMock(ServiceInterface::class);
// имитируем, что someMethod не имеет доступа к внешнему API
$serviceStub->method('someMethod')->willThrowException(
            new MyException(JsonResponse::HTTP_SERVICE_UNAVAILABLE, 'External API is not available.')
        );
// подменяем сервис в контейнере
$this->client->getContainer()->set(self::SERVICE_ID, $serviceStub);

// далее запрос к контроллеру
$this->client->request(Request::METHOD_GET, self::CONTROLLER_ENDPOINT_URL);
// и далее asserts для response


Такой тест проходится, меня смущает то, что вывод в консоли "не чистый".
Результат тестов зеленый, но из строки с willThrowException сообщения попадают в консоль.
Нормально ли это? Или не правильно делаю?

Пробовал на простом примере (без вложенных сервисов) - с отдельным классом/методом.
Там можно убрать Exception сообщения из консоли
с помощью добавление в тест
$this->expectException(MyException::class);
  • Вопрос задан
  • 208 просмотров
Пригласить эксперта
Ответы на вопрос 1
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
expectException это не "убрать из консоли", при тесте на исключения ты обязан указать его тип.

class ExceptionTest extends TestCase
{
    public function testException(): void
    {
        $this->expectException(InvalidArgumentException::class);
    }
}
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 11:14
65000 руб./за проект
19 апр. 2024, в 11:08
5000 руб./за проект
19 апр. 2024, в 10:59
150000 руб./за проект