Задать вопрос
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 будет?
  • Вопрос задан
  • 207 просмотров
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
AleksandrB
@AleksandrB
Совсем недавно вывел "Hello world"
- Метод setAuth был вызван ровно 1 раз
- Метод sendRequest был вызван с конкретным параметром ровно 1 раз (хотя создание Request стоит вынести в фабрику)
- После выбрасывания ClientExceptionInterface будем выброшено Exception

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

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

Похожие вопросы
FoodSoul Калининград
от 160 000 до 250 000 ₽
BGStaff Москва
До 300 000 ₽
Greenway Global Новосибирск
от 150 000 до 250 000 ₽