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

使用Mockito mock带泛型通配符的缓存类时出现Unfinished stubbing错误

问题根因

该报错与泛型通配符、AsyncCache自定义实现均无关,核心原因是Mockito打桩语法使用错误。
Mockito中doReturn()链式打桩的语法规则为:when()方法仅接收被mock的目标对象,待打桩的方法调用需要写在when()括号外部。你当前的写法将asyncCaffeineCacheManager.getCache(anyString())直接传入了when(),这行代码会直接执行方法调用,Mockito无法捕获到待打桩的方法签名,因此抛出「未完成打桩」的错误。

修复代码

将打桩逻辑调整为正确语法即可:

@BeforeEach
public void initTests() {
    doReturn(new NoOpAsyncCache<Integer, MyValue>("cacheName"))
            .when(asyncCaffeineCacheManager).getCache(anyString());
}

核心改动:将getCache(anyString())从when()的括号内移出,通过点运算符接在when(asyncCaffeineCacheManager)之后。

后续排查项

如果修正语法后仍存在报错,可按以下顺序校验:

  • 确认asyncCaffeineCacheManager是通过@Mock注解或Mockito.mock()生成的mock对象,而非手动new出来的真实业务实例
  • 确认测试类已开启Mockito注解支持:JUnit5环境下可在类上添加@ExtendWith(MockitoExtension.class),或在初始化方法中执行MockitoAnnotations.openMocks(this)完成mock对象注入
  • 确认没有在当前打桩逻辑前,对同一个方法执行了未完成的打桩操作(比如漏写了thenReturn/thenThrow的残留代码)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:15:43