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

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

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

Похожие вопросы