Java Spring中如何用@ContextConfiguration替代@SpringBootTest并保留随机端口配置
实现方案
@ContextConfiguration 原生不支持webEnvironment参数,要实现和@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)等同的效果,可搭配Spring Test原生注解组合实现,无需引入@SpringBootTest即可避免上下文冲突,最终代码写法如下:
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "my.xml", initializers = MyTest.MockJee.class) @WebAppConfiguration // 启用Web应用上下文能力 @TestPropertySource(properties = "server.port=0") // 配置为0即代表随机分配可用端口启动服务 public class MyTest { // 如需获取实际启动的端口,可直接注入 @LocalServerPort private int runningPort; ... }
各配置项作用说明:
@WebAppConfiguration:会触发测试框架加载WebApplicationContext,提供Web环境基础能力,替代@SpringBootTest的web环境初始化逻辑@TestPropertySource(properties = "server.port=0"):Spring体系中server.port配置为0时,会自动扫描当前可用的随机端口启动内嵌容器,和RANDOM_PORT的端口分配效果完全一致- 如果使用的Spring Boot版本较低不支持
@LocalServerPort,可以替换为@Value("${local.server.port}")获取实际启动端口
内容的提问来源于stack exchange,提问作者Yuri Molodyko
相关产品推荐
相关产品推荐

