【发布时间】:2015-11-06 15:53:05
【问题描述】:
经常编写集成测试时,需要在临时端口上启动一些服务器(例如 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)
}
}
}
【问题讨论】:
标签: java spring spring-boot integration-testing