Задать вопрос
PankovAlxndr
@PankovAlxndr
Fullstack web developer

Как тестировать данный метод?

Здравствуйте, у меня есть метод, они находится внутри определенного класса, он:
- принимает на вход реквест и серализатор (через интерфейсы)
- сериализует реквест (устанавливая определныне поля auth) в xml
- через еще одну зависимость client (Psr\Http\Client\ClientInterface) отправляет полученный xml во внешний сервис
- получает ответ от сервиса в xml и мапит его на мой класс

/**
     * @param RequestInterface    $request
     * @param SerializerInterface $serializer
     *
     * @return ResponseInterface
     * @throws \Exception
     */
    public function request(RequestInterface $request, SerializerInterface $serializer): ResponseInterface
    {
        try {
            $request->setAuth($this->token);
            $body = $serializer->serialize($request, 'xml');
            $request = new \Nyholm\Psr7\Request('POST', $this->url, [], $body);
            return $this->client->sendRequest($request);
        } catch (ClientExceptionInterface $e) {
            throw new \Exception($e->getMessage());
        }
    }

Запустил покрытие тестами, мне показывает что нужно тут покрыть, но что и как, какая практика?
понимаю что нужно писать моки, моки чего?
  • $request и его метода setAuth
  • $serializer и его метода serialize
  • $client (зависимость через конструктор класса появляется (Psr\Http\Client\ClientInterface)) и его метод sendRequest

еще ошибку покрыть надо, не могу в голове уложить - что тут тестировать?
насоздавать моков и тестировать(ожд вызов метода по 1му разу, а какой тогда assert будет?
  • Вопрос задан
  • 208 просмотров
Подписаться 2 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
AleksandrB
@AleksandrB
Совсем недавно вывел "Hello world"
- Метод setAuth был вызван ровно 1 раз
- Метод sendRequest был вызван с конкретным параметром ровно 1 раз (хотя создание Request стоит вынести в фабрику)
- После выбрасывания ClientExceptionInterface будем выброшено Exception

Да, метод выглядит очень простым для тестирования, но если вы покрываете все юнит тестами то необходимо покрывать именно все. В какой-то момент sendRequest может начать принимать другой тип данных и если это не покрыть то будет вызвана ошибка уже на проде.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽