【问题标题】:How to get the running server port in a SpringBoot test?如何在 Spring Boot 测试中获取正在运行的服务器端口?
【发布时间】:2019-04-30 15:10:37
【问题描述】:

我正在为带有 Apache Camel 路由的 Spring Boot 应用程序创建一些单元测试,使用 Spock 作为测试框架,我需要模拟来自另一个应用程序的响应。我为此制作了一个模拟控制器,但我需要将运行测试的端口注入到一个属性中。有没有办法获取运行测试的端口?

我试过了

@LocalServerPort
private int port 

@Autowired Environment environment;
String port = environment.getProperty("local.server.port");

但两者都返回 -1,我不知道有什么其他方法可以获取端口

我的测试配置了以下注解:

@RunWith(SpringRunner)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ActiveProfiles('test')

另外,有没有办法在application-test.yml 文件中注入那个随机端口?理想情况下,我需要在我的application-test.yml 文件中执行类似的操作:

app:
  service: localhost:${server.port}

其中端口是运行测试的随机端口。

【问题讨论】:

标签: java spring spring-boot


【解决方案1】:

你可以试试这个:

@SpringBootTest(classes = {Application.class}, webEnvironment = WebEnvironment.RANDOM_PORT)
    public class test{

    @LocalServerPort
    private int rdmServerPort;

    @LocalManagementPort
    private int rdmManagementPort;
        ...
}

【讨论】:

  • WebEnvironment.RANDOM_PORT 是这里的关键。如果您使用默认的模拟 Web 环境,则不会启动任何嵌入式容器。结果,不涉及端口,-1 将被注入。
  • @AndyWilkinson 看起来 op 已经在使用它了。如果使用RANDOM_PORT,有没有办法在属性文件中引用它,如 OP 所说的app.service=localhost:${server.port}(未明确定义 server.port)
猜你喜欢
  • 2015-07-30
  • 2021-03-27
  • 2018-08-09
  • 2021-03-01
  • 2015-07-07
  • 2019-07-03
  • 1970-01-01
  • 1970-01-01
  • 2019-01-08
相关资源
最近更新 更多