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
相关产品推荐
相关产品推荐

