参数匹配器的使用无效!预计有2名匹配者,1名已录制:



我需要验证对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"));

根据消息"预期2个匹配器,记录1个",如果UiHandler.sendMessage(Message)是委托给非最终双参数方法(通常是同名重载)的最终方法,则可能发生这种情况。这是一个问题,因为Mockito坚持每个参数只有一个匹配器,如果使用任何匹配器的话。由于final方法是由静态调度调用的,而且Mockito是通过动态重写mocked类来工作的,因此Mockito的第一个交互是使用一个双参数方法,它假设您正在使用一个匹配器进行存根处理(解释其他令人困惑的错误消息)。

如果可行,请确保UiHandler和sendMessage都是公共的和非最终的。如果没有,您可能需要使用Robolectric或PowerMock来覆盖字节码级别的final方法。

我在SO上写了更多关于Mockito内部的内容,包括每个参数需要一个匹配器:Mockito匹配器是如何工作的?

相关内容

  • 没有找到相关文章

最新更新