测试中SpringBootTest.WebEnvironment.RANDOM_PORT时如何访问local.server.port

Das*_*sma 5 spring spock spring-boot spring-cloud-feign

我正在尝试在 Spring Boot 应用程序的测试中为 Spock 测试设置 feign 客户端。

Spock 测试设置为

@ActiveProfiles("functional-test")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
Run Code Online (Sandbox Code Playgroud)

我有一个 application-function-test.yml ,其中我的 feign 客户端是 url 定义,我尝试过:

my.feign.client.example.url: localhost:${local.server.port}
Run Code Online (Sandbox Code Playgroud)

但本地服务器端口显示为 0,这不适合应用程序的随机端口。

我也尝试过,其中 randomServerPort 包含随机端口,但我无法覆盖该属性:

 @LocalServerPort
 int randomServerPort;

 @Value('${my.feign.client.example.url}')
 String feignTestClient

 void setup() {
     feignTestClient="localhost:${randomServerPort}"
 }
Run Code Online (Sandbox Code Playgroud)

有什么最佳实践的想法吗?我更喜欢在 application-function-test.yml 中设置 url,这样可以避免使用虚拟值进行初始化

我的 Feign 客户端如下所示:

@FeignClient(name = "myClient", url = "${my.feign.client.example.url}")
public interface FeignTestRestClient extends SomeControllerApi {}
Run Code Online (Sandbox Code Playgroud)