Модульное тестирование для Spring Boot API - PullRequest
1 голос
/ 24 апреля 2020

Я разрабатываю Spring Boot Web API и сейчас пишу необходимые модульные тесты.

Мне было интересно: не достаточно ли написания модульных тестов (JUnit + Mockito) для контроллеров ? Поскольку контроллеры являются точкой входа в мое приложение и что все логики c, реализованные на стороне службы, вызываются из открытого API, зачем мне писать тест для стороны службы?

Ответы [ 2 ]

1 голос
/ 25 апреля 2020

Я думаю, что вы, вероятно, путаетесь между модульными и интеграционными тестами.

Если вы используете Mockito, вы, вероятно, имеете в виду модульные тесты, в которых область действия класса тестирования должна быть только текущим классом.

Любые внешние вызовы методов должны быть смоделированы. Так что в вашем случае служебные вызовы должны быть смоделированы в случае написания модульного теста для вашего класса контроллера.

Ваш набор тестов должен содержать

  • Junit для контроллера - для проверки точек контракта интерфейса, таких как HTTP-метод, параметры запроса, обязательные входные данные, полезные данные допустимого запроса .
  • Junit для всех других классов, включая классы обслуживания - это для проверки базовых логи классов ваших приложений c
  • Интеграционный тест - Наконец интеграционный тест, который может поразить конечные точки вашего контроллера классами обслуживания и остальной функциональностью кода приложения.
1 голос
/ 24 апреля 2020

Прежде всего, если вы напишете свои тесты, чтобы охватить «требуемый уровень тестов» или требование «иметь какие-то тесты вообще» с уже выполненной производственной реализацией, будет слишком поздно. В большинстве случаев проведение тестов в первую очередь на основе ваших требований, контракта, варианта использования или чего-либо еще более оптимально. Тем не менее, я не знаю вашу ситуацию и то, что вы пытаетесь реализовать, поэтому воспринимайте это как предложение и переходите к ключевой вещи, о которой вы спрашиваете.

Ваш JUnit (предпочтительно 5) и Тесты Mockito, которые, вероятно, используют MockMvc, являются очень хорошими модульными (подобными) тестами для охвата проблем веб-коммуникации, таких как: типы запросов HTTP, тип контента, кодировка, параметры ввода и вывода JSON (де) сериализация, обработка ошибок, и др c. Их лучше всего тестировать с использованием сервисного уровня по издевательству. Благодаря этому вы можете легко охватить множество веб-кейсов без необходимости подготавливать данные в базе данных и т. Д. c.

Необходимо также проверить ядро ​​logi c. В зависимости от того, что это, возможно, было бы целесообразно протестировать его единичным способом (проще всего написать, он может охватить множество, в том числе и угловых) случаев. Он может быть дополнен некоторым набором интеграционных тестов, чтобы убедиться, что он отлично работает и в интеграции (Spring Beans, DB и др. c.).

При желании вы также можете написать некоторый тест E2E из веб-вызов через (реальные) HTTP-запросы через контроллеры, службы к базе данных / хранилищу данных (если есть), но я бы ограничил его только наиболее важным сценарием ios, чтобы использовать его в конвейере CI / CD для проверки того, что развертывание Закончено успешно.

Отказ от ответственности. Я нашел этот подход полезным во многих ситуациях, но определенно в некоторых других случаях было бы неплохо изменить точку баланса, чтобы лучше применять тестирование.

...