Запуск встроенных серверов перед загрузкой контекста в Spring Boot для тестирования - PullRequest
0 голосов
/ 14 сентября 2018

Я сейчас работаю над примером приложения , используя Spring Boot, Spring Data JPA и Spring Data Elasticsearch.Я хочу иметь возможность запускать модульные тесты как часть сборки конвейера, но они требуют, чтобы Elasticsearch работал для работы, поскольку служба выполняет вызовы к указанному серверу ES.SQL работает нормально, потому что я использую экземпляр H2 в памяти.

Я реализовал некоторый код, чтобы попытаться запустить ES как «встроенный» сервер.Встроенный сервер работает просто отлично, но кажется, по крайней мере, насколько я могу судить, он запускается ПОСЛЕ загрузки контекста.Самое главное после того, как ElasticSearchConfiguration сделает это.

Я думаю, что мне нужно реорганизовать код из AbstractElasticsearchTest в отдельный класс, который может выполняться до того, как ElasticSearchConfiguration сгенерирует клиент / шаблон, но я не уверенкак это сделать, ни как Google сказал, что процесс.

Есть ли какой-нибудь механизм в Spring Boot, который можно было бы использовать для запуска встроенных серверов до запуска какой-либо из конфигураций?Или есть какой-то способ, которым я мог бы улучшить ElasticSearchConfiguration, чтобы сделать это до создания клиента / шаблона, но только при запуске модульных тестов?

Редактировать: Так что, просто чтобы бытьнемного конкретнее ... я ищу средство / способ запуска ES 5 в "встроенном" режиме или как достаточно смоделировать код Spring Data ES, чтобы он работал на CI-сервере.Я знаю, что вышеприведенный код смешивает юнит-тесты с интеграционными тестами, поскольку в настоящее время он выполняет вызовы на физический сервер ES.Это то, что я пытаюсь исправить: я должен быть в состоянии ошарашить / смоделировать достаточно базового кода Spring Data, чтобы заставить модульный тест думать, что он говорит с реальной сделкой.Затем я могу изменить тесты, которые определяют, были ли документы сделаны в ES, и тестировать такие вещи, как поиск с опережением ввода, вместо того, чтобы быть интеграционными тестами, чтобы они не запускались при запуске CI или Sonar.

1 Ответ

0 голосов
/ 18 сентября 2018

Хорошо, поэтому для тех, кто может вернуться сюда в будущем, этот коммит показывает изменения, которые я сделал, чтобы заставить ES работать как "встроенный".

Орехи-и-болты должны были запустить узел как "локальный", а затем физически вернуть node.client().Затем в методе Spring Bean, который получает клиент, проверьте, включено ли «встроенное», если это так, запустите узел и верните его Client (локальный), если не просто соберите клиент так же, как обычно.

...