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

为何Mockito不允许按不同参数存根返回不同值?遇UnnecessaryStubbingException

Mockito存根不同参数方法抛出UnnecessaryStubbingException的原因

你的代码:

when(myServiceMock.mymethod("aaa", myEnum.ONE)).thenReturn(true);
when(myServiceMock.mymethod("bbb", myEnum.ONE)).thenReturn(false);

抛出UnnecessaryStubbingException的核心原因是存在未被测试触发的存根定义。

Mockito的严格模式(默认启用)会检查所有存根的方法调用是否都在测试中被执行。如果你的测试用例只实际调用了其中一种参数组合(比如只调用了mymethod("aaa", myEnum.ONE),完全没用到"bbb"对应的存根),那这个没被触发的存根就会被判定为冗余,从而抛出异常。

另外需要排查小概率情况:如果字符串参数存在肉眼不易察觉的差异(比如前后空格、大小写不一致),或者该参数类型的equals方法被重写后匹配逻辑不符合预期,会导致存根无法被命中,进而被判定为多余。

常见解决方式

  • 若某个存根本来就不需要,直接删除对应的存根代码;
  • 补充测试逻辑,确保所有存根的方法调用都在测试中被触发;
  • 关闭严格模式:可以给@Mock注解添加参数strictness = Mock.Strictness.LENIENT,或者用Mockito.lenient().when(...)来定义允许冗余的存根。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 12:53:16