Как правильно покрыть тестами REST API сервис на Java?
Добрый день!
Имеется REST-сервис на Java, построенный с использованием фреймворка Jersey и разворачиваемый в контейнере на Tomcat. Часть методов работает "локально" (обращается к БД, пишет/получает данные, возвращает результат), а часть в процессе исполнения обращается к сторонним сервисам по их REST API, обмениваясь с ними json'ами. Причем часть сторонних сервисов - собственные, развернутые на том же Tomcat'е, а часть - внешние сервисы. Все методы REST-сервиса возвращают объекты класса Response.
Задача: покрыть методы сервиса тестами с целью убедится что при нормальном сценарии возвращается ожидаемый результат.
К сожалению, не понимаю ряд моментов:
- какие библиотеки использовать? JUnit? REST Assured? Mockito? Иные варианты?
- если методы обращаются к другим сервисам (как собственным, так и внешним): нужно ли в процессе тестирования действительно к ним обращаться или следует каким-то образом мокировать ответы этих сервисов?
Прочитал ряд статей и, к сожалению, в разных источниках противоречивая информация и неясно, как лучше подобраться к вопросу. Подскажите, пожалуйста, как лучше организовать тестирование в данном случае? Спасибо!
Полагаю, что интеграционные, т.к. методы в процессе исполнения вызывают методы множества других классов. Если я верно понимаю, то под интеграционным тестированием понимаем обкатку взаимодействия сразу нескольких классов.
JUnit и мокито - это модульное тестирование. А то что ты хочешь это похоже на e2e поскольку
тебе нужно тестировать REST API - тоесть речь идет о полноценном запуске приложения.
Тебе нужен тестовый environment. И тестовые варианты всех баз и всех внешних сервисов.
Они должны быть безопасны и готовы к любым тестовым запросам. Поднтятие такого
environment выходит за рамки обычного программирования. Чаще всего его поднимают
вместе с devops на виртуалках. Или в докерах. Неважно.
Я могу здесь ошибаться поскольку каждая организация по своему делает этот процесс.
Варианты такие:
1. Мокать методы связанные с интеграцией
2. Использовать mockServer для подмены внешних сервисов
3. Использовать testcontainers для поднятия всего нужного окружения