You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 3中如何用动态端口WireMock测试OpenAPI生成客户端

解决方案

方法1:使用@DynamicPropertySource动态绑定配置

这是Spring Boot测试中适配动态端口最直接的方案,通过该注解可以在测试运行时将WireMock的动态baseUrl注入到你的配置项中。

示例代码:

import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.springframework.test.context.DynamicPropertyRegistry;
import org.springframework.test.context.DynamicPropertySource;
import com.github.tomakehurst.wiremock.WireMockServer;

class EchoClientIntegrationTest {

    // 初始化WireMock服务
    private static final WireMockServer wireMockServer = new WireMockServer();

    @BeforeAll
    static void startWireMock() {
        wireMockServer.start();
    }

    @AfterAll
    static void stopWireMock() {
        wireMockServer.stop();
    }

    // 动态绑定配置项到WireMock的baseUrl
    @DynamicPropertySource
    static void registerWireMockProperties(DynamicPropertyRegistry registry) {
        registry.add("rest.clients.echo.base-path", wireMockServer::baseUrl);
    }

    // 编写你的测试逻辑
    @Test
    void testEchoClient() {
        // 这里注入的ApiClient已经自动使用WireMock的动态地址
    }
}

如果使用了wiremock-spring-boot-starter集成包,WireMockServer会被自动注册为Spring Bean,此时可以直接注入使用:

@DynamicPropertySource
static void registerWireMockProperties(DynamicPropertyRegistry registry, WireMockServer wireMockServer) {
    registry.add("rest.clients.echo.base-path", wireMockServer::baseUrl);
}

方法2:确保客户端配置类正确绑定配置

要让动态配置生效,你的客户端配置类需要正确绑定rest.clients.echo.base-path配置项,示例如下:

@Configuration
@ConfigurationProperties(prefix = "rest.clients.echo")
public class EchoClientConfiguration {

    private String basePath;

    // Getter和Setter
    public String getBasePath() {
        return basePath;
    }

    public void setBasePath(String basePath) {
        this.basePath = basePath;
    }

    @Bean
    public ApiClient echoApiClient() {
        ApiClient apiClient = new ApiClient();
        // 使用绑定的basePath覆盖生成代码中的默认值
        apiClient.setBasePath(basePath);
        return apiClient;
    }
}

关键说明

  • @DynamicPropertySource是Spring Boot 2.2+提供的特性,Spring Boot 3完全支持,它会在测试启动时优先覆盖application.properties/yaml中的静态配置。
  • 无需硬编码端口,WireMock每次启动的随机端口会自动同步到你的REST客户端配置中,保证测试环境的一致性。

内容的提问来源于stack exchange,提问作者u4963840

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 13:51:05