SpringBoot测试中如何获取正在运行的服务器端口?

Jua*_*bos 6 java spring spring-boot

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

\n\n

我尝试过

\n\n
@LocalServerPort\nprivate int port \n
Run Code Online (Sandbox Code Playgroud)\n\n

\n\n
@Autowired Environment environment;\nString port = environment.getProperty("local.server.port");\n
Run Code Online (Sandbox Code Playgroud)\n\n

但两者都返回 -1,我不知道\xc2\xb4t 是否有其他方法来获取端口

\n\n

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

\n\n
@RunWith(SpringRunner)\n@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)\n@ActiveProfiles(\'test\')\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
app:\n  service: localhost:${server.port}\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n

Tin*_*yOS 4

你能试试这个吗:

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

    @LocalServerPort
    private int rdmServerPort;

    @LocalManagementPort
    private int rdmManagementPort;
        ...
}
Run Code Online (Sandbox Code Playgroud)

  • `WebEnvironment.RANDOM_PORT` 是这里的关键。如果您使用默认的模拟 Web 环境,则不会启动任何嵌入式容器。因此,不涉及任何端口,并且将注入“-1”。 (3认同)