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

Java WebClient Mock无效排查:为何未返回预期响应?

问题分析与解决步骤

1. 断言逻辑错误

你的测试断言存在明显错误:assertEquals(Mono.just("response"), response);

  • 服务方法getResponse返回的是block()后的字符串结果,而非Mono对象。
  • 修正断言代码:
    assertEquals("response", response);
    

2. Mock参数匹配失效(核心问题)

返回HTML说明你的Mock逻辑未命中,服务实际发起了真实HTTP请求(大概率是请求失败后的默认错误页面)。问题出在BodyInserters.fromValue(requestBody)的参数匹配环节:

  • 即便requestBody是字符串,也可能因测试传入的实例与服务内使用的实例引用/值存在细微差异,导致Mock不生效。
  • 解决方法:改用参数匹配器确保Mock命中:
    // 匹配任意BodyInserter实例,适合无需精准校验请求体的场景
    when(requestBodyUriMock.body(any(BodyInserter.class))).thenReturn(requestHeadersMock);
    // 若需要精准匹配请求体内容,使用eq匹配器
    // when(requestBodyUriMock.body(eq(BodyInserters.fromValue(requestBody)))).thenReturn(requestHeadersMock);
    

3. 验证Mock对象注入有效性

确认webClientMock已正确注入到someServiceSpy中,服务类内部没有新建WebClient实例(比如直接调用WebClient.create()),否则Mock对象不会被实际使用。

4. 排查错误处理分支

临时在doOnError中添加日志或断点,确认是否进入了异常处理分支。如果进入,说明Mock未生效时发起的真实请求出现了错误,返回了HTML错误页。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:50:30