Spring Boot: как запустить сервер при запуске Spring Context и остановить его при отключении контекста во время выполнения тестов? - PullRequest
2 голосов
/ 10 мая 2019

Приложение My Spring Boot использует сервер базы данных. Во время тестов я хотел бы запустить встроенную версию базы данных. Сервер запускается со случайного порта каждый раз (он testcontainers.org).

Первым делом я попытался использовать @ClassRule в JUnit4 для запуска / остановки сервера, но Spring Boot умный и повторно использует контексты в тестовых классах. Так что для одного класса тестирования все работает нормально, но когда я запускаю тесты в пакете (или во всех тестах), они терпят неудачу из-за разницы в жизненном цикле.

  1. Можно ли каким-то образом подключиться к выполнению тестов и получить обратный вызов, когда инфраструктура Spring Boot Test запускает и останавливает новый контекст?

Наиболее вероятный ответ, который я получу, - «просто добавьте серверный компонент в контекст при запуске ваших тестов». Хорошо, но здесь я сталкиваюсь с другой проблемой:

  1. Как мне убедиться, что серверный компонент инициализируется перед другими компонентами, которые общаются с сервером? @DependsOn здесь не подходит, так как я не хочу, чтобы в производстве присутствовал компонент, помеченный @DependsOn("testServer")

Spring Boot - это 2.1.6.

...