Приложение My Spring Boot использует сервер базы данных. Во время тестов я хотел бы запустить встроенную версию базы данных. Сервер запускается со случайного порта каждый раз (он testcontainers.org
).
Первым делом я попытался использовать @ClassRule
в JUnit4 для запуска / остановки сервера, но Spring Boot умный и повторно использует контексты в тестовых классах. Так что для одного класса тестирования все работает нормально, но когда я запускаю тесты в пакете (или во всех тестах), они терпят неудачу из-за разницы в жизненном цикле.
- Можно ли каким-то образом подключиться к выполнению тестов и получить обратный вызов, когда инфраструктура Spring Boot Test запускает и останавливает новый контекст?
Наиболее вероятный ответ, который я получу, - «просто добавьте серверный компонент в контекст при запуске ваших тестов». Хорошо, но здесь я сталкиваюсь с другой проблемой:
- Как мне убедиться, что серверный компонент инициализируется перед другими компонентами, которые общаются с сервером?
@DependsOn
здесь не подходит, так как я не хочу, чтобы в производстве присутствовал компонент, помеченный @DependsOn("testServer")
Spring Boot - это 2.1.6.