无法在弹簧引导测试 1.5 中设置运行时本地服务器端口
我正在为我的应用程序使用Spring Boot 1.5。在集成测试中,我想获取Web服务器的运行时端口号(注意:TestRestTemplate在我的情况下没有用。我尝试过一些方法,但似乎都不起作用。以下是我的方法。
第一种方法
@SpringBootTest(classes = TestConfig.class, webEnvironment =WebEnvironment.DEFINED_PORT)
public class RestServiceTest {
@LocalServerPort
protected int port;
在我的文件中,我已将服务器端口定义为src/main/resources/config/application.properties
服务器.端口 = 8081
但是有了这个代码,我得到了错误
无法解析值“${local.server.port}”中的占位符“local.server.port”
第二种方法
我变了
网站环境 =WebEnvironment.DEFINED_PORT
自
网站环境 =WebEnvironment.RANDOM_PORT
在我的文件中,我已经定义了src/main/resources/config/application.properties
服务器端口 = 0
这将引发与第一种方法相同的错误。
第三种方法
在第三种方法中,我试图使用
protected int port;
@Autowired
Environment environment
this.port = this.environment.getProperty("local.server.port");
这将返回值null
第四种方法
最后,我尝试通过创建要侦听的事件侦听器来查找端口号。ApplicationEvents
EmbeddedServletContainerIntialize
@EventListener(EmbeddedServletContainerInitializedEvent.class)
public void onApplicationEvent(EmbeddedServletContainerInitializedEvent event) {
this.port = event.getEmbeddedServletContainer().getPort();
}
public int getPort() {
return this.port;
}
已添加到TestConfig
现在,在我的测试类中,我尝试使用此侦听器来获取端口
@SpringBootTest(classes = TestConfig.class, webEnvironment =WebEnvironment.RANDOM_PORT)
public class RestServiceTest {
protected int port;
@Autowired
EmbeddedServletContainerIntializedEventListener embeddedServletcontainerPort;
this.port = this.embeddedServletcontainerPort.getPort();
这将返回 .另外,我发现监听器事件从未触发过。0
它非常直接,就像在文档和其他帖子中一样,但不知何故,它不适合我。非常感谢您的帮助。