Mockito中InvalidUseOfMatchersException异常求助(附代码示例)
问题排查与解决
嘿,这个问题的根源很明确——你在调用真实被测试对象的run方法时,错误地使用了Mockito的参数匹配器,这直接触发了InvalidUseOfMatchersException异常。
具体错误点
看你测试代码里的这一行:
Assert.assertEquals(batchStatusUpdate.run(Mockito.any(String.class)), 1);
这里的batchStatusUpdate是你要测试的真实对象(不是Mockito模拟出来的),而Mockito.any(String.class)是Mockito的参数匹配器——它的设计用途是给Mock对象的方法调用设置预期或验证行为,绝对不能直接传给真实对象的方法当参数。
当你移除run方法的String参数后,不需要传递任何匹配器,测试自然就正常了,这也反过来验证了问题的核心就是匹配器的误用。
修复方案
你只需要给run方法传递一个真实的字符串参数即可,比如一个测试用的job名称:
// 传递真实的测试参数,比如固定的jobName Assert.assertEquals(batchStatusUpdate.run("test-update-job"), 1);
如果你的run方法逻辑不依赖这个参数的具体值,随便传一个合法的字符串(甚至null,如果方法允许的话)都可以,关键是不能用Mockito的匹配器来替代真实参数。
额外提醒
Mockito的参数匹配器(比如any()、eq()、anyString()等)只能用在以下场景:
- 调用
when(mockObject.someMethod(...))设置Mock方法的返回值时 - 调用
verify(mockObject).someMethod(...))验证Mock方法的调用次数或参数时
永远不要在真实对象的方法调用中使用这些匹配器,否则必然会触发类似的异常。
内容的提问来源于stack exchange,提问作者user3352872
相关产品推荐
相关产品推荐

