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

Mockito无法验证方法调用:verify语句报错,when语句正常

解决Mockito verify报错的问题

这问题我之前踩过坑,核心原因是你把Mockito的verify和when调用顺序搞反啦!

先搞懂两个方法的作用顺序:

  • when(...)是预先存根:告诉Mockito,当某个方法被调用时要返回指定值,必须在实际触发该方法调用的业务逻辑之前执行。
  • verify(...)是事后验证:用来检查某个方法是否已经被调用了指定次数,必须在实际触发方法调用的业务逻辑之后执行。

你现在的代码先执行verify,这时候customvalueProcessorFactory.get(...)还完全没被调用过,Mockito自然会抛出“方法未按预期次数调用”的错误。

正确的代码顺序示例:

// 1. 先存根方法,指定返回值(这步要在业务逻辑执行前做)
when(customvalueProcessorFactory.get(customvalueKey, userId)).thenReturn(customvalueProcessor);

// 2. 执行你要测试的核心业务逻辑(比如调用messageProcessor的处理方法,内部会触发get方法调用)
messageProcessor.process(testMessage);

// 3. 最后验证方法调用次数(这步要在业务逻辑执行后做)
Mockito.verify(customvalueProcessorFactory, times(1)).get(customvalueKey, userId);

如果调整顺序后还是报错,排查这两个点:

  • 参数不匹配:实际业务逻辑调用get时传入的customvalueKey或userId,和你verify里写的参数不一致。可以先用宽松匹配器排查,比如verify(customvalueProcessorFactory).get(anyString(), anyLong())(根据参数类型调整),如果不报错了,就说明是参数匹配的问题。
  • Mock实例不一致:你verify的customvalueProcessorFactory实例,和业务逻辑中实际使用的Mock不是同一个。检查一下Mock的注入逻辑,确保测试类里的实例和被测试对象依赖的是同一个Mock。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:35:43