Есть много разных способов сделать интеграционное тестирование.
Spring имеет встроенную инфраструктуру, которая выполняет интеграционный тест в той же JVM, что и реальный сервер.
Если приложение тяжелое (как правило, относится к монолитам), для его запуска может потребоваться некоторое время, поэтому лучшее, что вы можете сделать, это «выбрать» какие части приложения для загрузки, которые имеют отношение к тесту. Весной есть способы добиться этого, вопрос в том, позволяет ли код вашего приложения такое разделение.
Тогда есть способ написать интеграционные тесты, чтобы они действительно связывались с удаленным сервером, который работает «заранее». во время сборки это можно сделать один раз перед фазой тестирования, а затем, когда тесты завершены, сервер должен быть выключен.
Обычно в таких тестах есть несколько способов указать хост / порт сервера для связи (я отложил в сторону безопасность, учетные данные и т. Д.).
Таким образом, вы можете проверить, есть ли какое-то специальное свойство flag / system - прочитайте хост / порт оттуда.
В этом подходе хорошо то, что вам не нужно перезагружать сервер перед каждым тестом.
Плохо то, что он не всегда позволяет легко тестировать: если ваш тест развертывает некоторые тестовые данные, этот тест также должен удалить данные в конце теста.
Тесты должны быть тщательно спланированы.
Третий подход является своего рода гибридом и, как правило, не является основной ИМО:
Вы можете создать специальную настройку, которая будет запускать тест в другой JVM (внешне), но как только тест начнется, его байт-код будет загружен на работающий сервер (для этого на сервере должен быть бэкдор), и фактический байт-код будет фактически выполнен на сервере. Снова сервер работает и работает.
Я однажды написал библиотеку, чтобы сделать это со Споком, но это было давно, и мы не использовали ее в конце концов (этот проект был закрыт).
Не хочу саморекламы или еще чего-нибудь, но вы можете проверить это и, возможно, позаимствовать технические идеи о том, как это сделать.