Spring Boot+Java环境下使用MockServer模拟外部服务响应方案咨询
使用MockServer在Spring Boot中模拟外部API响应
1. 引入依赖
在Maven项目的pom.xml中添加MockServer相关依赖(Gradle项目可对应转换):
<dependencies> <!-- 测试环境自动集成依赖 --> <dependency> <groupId>org.mock-server</groupId> <artifactId>mockserver-spring-test</artifactId> <version>5.15.0</version> <scope>test</scope> </dependency> <!-- Java客户端,用于配置Mock规则 --> <dependency> <groupId>org.mock-server</groupId> <artifactId>mockserver-client-java</artifactId> <version>5.15.0</version> <scope>test</scope> </dependency> </dependencies>
注:请使用与你的Spring Boot版本兼容的最新MockServer版本。
2. 测试环境快速集成
在测试类上添加@MockServerTest注解,MockServer会自动启动并注入MockServerClient实例,无需额外配置:
import org.mockserver.spring.test.MockServerTest; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.mockserver.client.MockServerClient; @MockServerTest public class ExternalServiceMockTest { @Autowired private MockServerClient mockServerClient; // 测试代码... }
3. 定义Mock规则
通过MockServerClient配置请求匹配规则和对应的响应,模拟外部API的行为。例如,模拟一个GET接口返回用户信息:
import static org.mockserver.model.HttpRequest.request; import static org.mockserver.model.HttpResponse.response; import static org.mockserver.model.JsonBody.json; @Test void testMockExternalUserApi() { // 匹配外部API的请求:GET /user/123 HttpRequest expectedRequest = request() .withMethod("GET") .withPath("/user/123"); // 定义Mock响应:200状态码+用户JSON HttpResponse mockResponse = response() .withStatusCode(200) .withBody(json("{\"id\":123,\"name\":\"John Doe\",\"email\":\"john@example.com\"}")); // 绑定请求与响应 mockServerClient.when(expectedRequest).respond(mockResponse); // 调用你的业务代码(此时业务代码应指向MockServer的地址) String apiResponse = restTemplate.getForObject(mockServerClient.getRemoteAddress() + "/user/123", String.class); // 验证结果符合预期 assert apiResponse.contains("John Doe"); }
4. 开发环境Mock配置
如果需要在本地开发环境而非仅测试环境中模拟外部API,可按以下步骤操作:
- 启动独立MockServer实例:
使用Docker快速启动:
或下载jar包手动启动:docker run -d -p 1080:1080 mockserver/mockserverjava -jar mockserver-netty-5.15.0.jar -serverPort 1080 - 配置业务代码指向MockServer:
在application-dev.properties中修改外部API的基础地址:external.api.base-url=http://localhost:1080 - 配置Mock规则:
可通过MockServer的Web控制台(访问本地1080端口的dashboard路径)可视化配置规则,或在Spring Boot启动类中通过MockServerClient编程式配置:@Bean public CommandLineRunner mockExternalApi(MockServerClient mockServerClient) { return args -> { // 配置POST接口Mock规则 mockServerClient.when(request() .withMethod("POST") .withPath("/user") .withBody(json("{\"name\":\"Jane Doe\"}"))) .respond(response() .withStatusCode(201) .withBody(json("{\"id\":456,\"name\":\"Jane Doe\"}"))); }; }
5. 常见场景模拟
- 模拟错误响应:
mockServerClient.when(request().withPath("/user/999")) .respond(response().withStatusCode(404).withBody("用户不存在")); - 匹配请求参数:
HttpRequest requestWithParams = request() .withMethod("GET") .withPath("/users") .withQueryStringParameter("role", "admin"); mockServerClient.when(requestWithParams) .respond(response().withBody(json("[{\"id\":1,\"role\":\"admin\"}]")));
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

