大家好,我是Mockito的新手,任何人都可以帮助我
在我的情况下,我需要验证handler.sendMessage(msg)
代码:
//This bundleImportStorage will send message to UI handler by passing message object
bundleImporter.bundleImportFromStorage(intent);
//In this line i am getting error
when(uiHandler.sendMessage(any(Message.class))).thenReturn(true);
异常详情:
org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
Invalid use of argument matchers!
2 matchers expected, 1 recorded:
-> at com.fio.installmanager.nonui.com.bundleimport.TestBundleImport.testIntentExtras(TestBundleImport.java:69)
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"));
答案 0 :(得分:3)
基于消息“2匹配预期,1记录”,如果UiHandler.sendMessage(Message)
是委托给非最终双参数方法的最终方法(通常是同名的重载),则会发生这种情况。这是一个问题,因为如果使用任何匹配器,Mockito坚持每个参数只有一个匹配器。因为最终方法是由static dispatch调用的,并且因为Mockito通过动态覆盖模拟类来工作,所以Mockito的第一个交互是使用双参数方法,它假设你使用单个匹配器进行存根(解释其他方面令人困惑)错误信息)。
如果可行,请确保UiHandler和sendMessage都是公共的和非最终的。如果没有,您可能需要求助于Robolectric或PowerMock来覆盖字节码级别的final
方法。
我已经写了更多关于Mockito内部的内容,包括每个参数需要一个匹配器,在SO:How do Mockito matchers work?