gpt4 book ai didi

java - Spring Boot 测试 - 如何在 Spring Boot 之前启动嵌入式服务器?

转载 作者:太空宇宙 更新时间:2023-11-04 13:15:32 27 4
gpt4 key购买 nike

经常编写集成测试时,需要在临时端口上启动一些服务器(例如 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)
}
}
}

最佳答案

//set server.port=0 and then inject the actual (‘local’) port as a @Value

@WebIntegrationTest("server.port:0")
public class RedisTest{

@Autowired
EmbeddedWebApplicationContext server;

@Value("${local.server.port}")
int port;

}

http://docs.spring.io/spring-boot/docs/current/reference/html/howto-embedded-servlet-containers.html#howto-discover-the-http-port-at-runtime

关于java - Spring Boot 测试 - 如何在 Spring Boot 之前启动嵌入式服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33570626/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com