当前位置: 首页 > 工具软件 > Mockito > 使用案例 >

Mockito:org.mockito.exceptions.misusing.InvalidUseOfMatchersException

司空宣
2023-12-01
org.mockito.exceptions.misusing.InvalidUseOfMatchersException: 
Invalid use of argument matchers!
2 matchers expected, 1 recorded:
-> at com.didi.bigdata.tag.control.DTagOuterControllerTest.lockDtagsTest(DTagOuterControllerTest.java:89)

This exception may occur if matchers are combined with raw values:
    //incorrect:
    someMethod(anyObject(), "raw String");
When using matchers, all arguments have to be provided by matchers.
For example:
    //correct:
    someMethod(anyObject(), eq("String by matcher"));

For more info see javadoc for Matchers class.

这个错误是新手常犯的错误,先看测试代码

Mockito.when(callerService.checkCallerAuth(Mockito.anyString(),Const.EDITFILE_OUTER_CALLER_API)).thenReturn(true);//错误发生的代码区
Mockito.when(dtagOuterService.saveTagLock(Matchers.same(tagLock))).thenReturn("correct");

错误分析:
从异常的位置来看,该异常发生在打桩阶段,还未执行到真正的测试。
从异常的信息来看,显然违反了一个Mockito框架中的Matchers匹配参数的规则。根据Matchers文档如下,在打桩阶段有一个原则,一个mock对象的方法,如果其若干个参数中,有一个是通过Matchers提供的,则该方法的所有参数都必须通过Matchers提供。而不能是有的参数通过Matchers提供,有的参数直接给出真实的具体值。
解决方法
就是修改两个都用具体值或者两个都用匹配。

        Mockito.when(callerService.checkCallerAuth(Mockito.anyString(),Mockito.anyInt())).thenReturn(true);
        Mockito.when(dtagOuterService.saveTagLock(Matchers.same(tagLock))).thenReturn("correct");

注意:在Mockito 1.x中,org.mockito.Matchers已经过时,org.mockito.Mockito继承自Matchers,用以取代Matchers。

 类似资料:

相关阅读

相关文章

相关问答