后端与接口
用 WireMock 单元测试外部 REST API…
在测试调用外部 REST API 的服务时,用 WireMock 桩化 HTTP 响应、验证请求细节并模拟超时与 4xx/5xx 错误。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
用 WireMock 单元测试外部 RE通用
解决思路
- 添加测试作用域依赖:在 Maven/Gradle 中引入 WireMock(test scope)以及 AssertJ。
- 注册扩展:使用 `@RegisterExtension WireMockExtension` 并配置 `dynamicPort()`。
- 配置客户端:将 `wireMock.getRuntimeInfo().getHttpBaseUrl()` 作为被测服务的 base URL。
- 桩化响应:用 `stubFor()` 匹配请求(URL、headers、body)并返回预设响应。
- 执行并断言:调用服务方法,用 AssertJ 校验返回结果。
- 验证请求:用 `verify()` 确认客户端发出了正确的 API 调用。
- 若桩未匹配:检查 URL 编码、header 名称,查询参数使用 `urlEqualTo`。
- 若测试挂起:在 HTTP 客户端配置连接超时;用 `withFixedDelay()` 模拟超时。
- 若端口冲突:始终使用 `wireMockConfig().dynamicPort()`。
- 最佳实践:使用动态端口避免并行测试冲突;验证请求以确保客户端用法正确;覆盖超时、4xx、5xx 错误场景;每个测试只关注一个关注点;依赖 `@RegisterExtension` 在测试间自动重置;绝不调用真实 API,始终桩化第三方端点。
- 注意事项:必须使用动态端口,固定端口会导致并行执行冲突;测试 HTTPS 时需配置 WireMock TLS 设置;更具体的桩优先于通用桩;WireMock 有性能开销,追求更快测试可在客户端层 mock;保持桩与实际 API 契约同步。
- 参考 `references/advanced-examples.md` 获取错误场景、body 验证、超时模拟和有状态测试示例。
适用边界 · 注意事项
- 需要测试真实网络端到端行为或第三方 API 实际契约时
- 对性能极度敏感、需要避免 WireMock 开销的测试场景