4.3.1 用随机端口启动服务器
前面提到过,此处的默认行为是启动服务器监听 8080 端口。在一台机器上一次只运行一个测试的话,这没什么问题,因为没有其他服务器监听 8080 端口。但如果你和我一样,本机总是有其他服务器在监听 8080 端口,那该怎么办?这时测试会失败,因为端口冲突,服务器启动不了。一定要有更好的办法才行。
幸运的是,让 Spring Boot 在随机选择的端口上启动服务器很方便。一种办法是将 server.port 属性设置为 0 ,让 Spring Boot 选择一个随机的可用端口。 @WebIntegrationTest 的 value 属性接受一个 String 数组,数组中的每项都是键值对,形如 name=value ,用来设置测试中使用的属性。要设置 server.port ,你可以这样做:
@WebIntegrationTest(value={"server.port=0"})
另外,因为只要设置一个属性,所以还能有更简单的形式:
@WebIntegrationTest("server.port=0")
通过 value 属性来设置属性通常还算方便。但 @WebIntegrationTest 还提供了一个 randomPort 属性,更明确地表示让服务器在随机端口上启动。你可以将 randomPort 设置为 true ,启用随机端口:
@WebIntegrationTest(randomPort=true)
既然我们在随机端口上启动了服务器,就需要在发起 Web 请求时确保使用正确的端口。此时的 getForObject() 方法在 URL 里硬编码了 8080 端口。如果端口是随机选择的,那在构造请求时又该怎么确定正确的端口呢?
首先,我们需要以实例变量的形式注入选中的端口。为了方便,Spring Boot 将 local.server.port 的值设置为了选中的端口。我们只需使用 Spring 的 @Value 注解将其注入即可:
@Value("${local.server.port}")
private int port;
有了端口之后,只需对 getForObject() 稍作修改,使用这个 port 就好了:
rest.getForObject(
"http://localhost:{port}/bogusPage", String.class, port);
这里我们在 URL 里把硬编码的 8080 改为 {port} 占位符。在 getForObject() 调用里把 port 属性作为最后一个参数传入,就能确保该占位符被替换为注入 port 的值了。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论