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

Mock RestTemplate时postForEntity方法返回null该如何解决?

可按以下步骤排查解决:

1. 确认Mock注解生效

  • 测试类必须搭配Mockito的启动注解,JUnit 5 需加:
    @ExtendWith(MockitoExtension.class)
    
    JUnit 4 需加:
    @RunWith(MockitoJUnitRunner.class)
    
    漏加该注解会导致@Mock标注的对象没有被初始化,桩设置不生效。

2. 修正ResponseEntity泛型匹配

你当前定义的返回对象泛型为ResponseEntity<Object>,和实际调用postForEntity时返回的ResponseEntity<ResponseVO>类型不匹配,Mockito会因泛型校验失败无法命中桩规则,修改为对应泛型即可:

// 把泛型从Object改为ResponseVO
ResponseEntity<ResponseVO> resp = new ResponseEntity<>(respVO, HttpStatus.OK);

3. 确认Mock实例正确注入到目标类

  • 需使用@InjectMocks标注你要测试的业务类实例,确保业务类中依赖的RestTemplate就是你Mock出来的实例
  • 禁止在业务类中手动new RestTemplate(),否则Mock实例无法替换业务类中实际使用的对象,桩规则自然不生效

4. 验证参数匹配规则完全匹配方法签名

你调整后的参数匹配规则是正确的,确保没有匹配到其他重载的postForEntity方法即可:

when(restTemplate.postForEntity(anyString(), any(HttpEntity.class), eq(ResponseVO.class))).thenReturn(resp);

如以上配置都正确仍返回null,可换用Mockito的doReturn写法绕开返回值校验:

doReturn(resp).when(restTemplate).postForEntity(anyString(), any(HttpEntity.class), eq(ResponseVO.class));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 14:54:02