При написании интеграционных тестов довольно часто необходимо запустить некоторый сервер (например, redis, zookeeper) на эфемерном порту, а затем передать порт как свойство Spring. Проблема заключается в том, что на самом деле используются порт неизвестен до запуска сервера, поэтому он не может быть передан с помощью аннотаций:Весенние тесты загрузки - как запустить встроенный сервер до весенней загрузки?
@IntegrationTest(["redis.port=???"])
class RedisTest {
@Before
before(){
int port = startRedis(
}
}
Что идиоматический способ для достижения этой цели? В идеале я хотел бы включить это в правило junit.
Вот то, что работает для меня, но не выглядит хорошо (проходящий через порт статической переменной):
@IntegrationTest(initializers=Initializer.class)
public class RedisTest {
public static int port;
public static class Initializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
public void initialize(ConfigurableApplicationContext ctx){
port = startRedis()
EnvironmentTestUtils.addEnvironment(ctx, "redisPort=" + port)
}
}
}
Это не имеет отношения к вопросу ... Моя проблема связан с другими серверами в среде, а не с HTTP, встроенными в Spring Boot. – mabn