Mockito - 期望0匹配,1记录(InvalidUseOfMatchersException)

时间:2012-07-12 19:12:53

标签: java exception mocking mockito

我正在尝试模拟一些mongo类,这样我就不需要连接(相当标准的东西)但是下面的代码给了我一些问题:

when(dbCollection.find(isA(DBObject.class))).thenReturn(dbCursor);

运行这个让我:

  

org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
  参数匹配器的使用无效!
  0匹配预期,1记录:
  at ... GridFileManagerTest.beforeClass(GridFileManagerTest.java:67)

     

如果匹配器与原始值组合,则可能会发生此异常:
  //错误:someMethod(anyObject(),“raw String”);

     

使用匹配器时,所有参数都必须由匹配器提供   例如:
      //正确:
      someMethod(anyObject(),eq(“by matcher”));

     

有关更多信息,请参阅Matchers类的javadoc。

如果我这样做的话:

when(dbCollection.find(mock(DBObject.class))).thenReturn(dbCursor);

它不再有这个问题。这似乎没有实现我想要的 - 我想在使用DBObject类型的对象调用方法时返回值。

思想?

3 个答案:

答案 0 :(得分:17)

我认为如果dbCollection不是Mockito-mock(或者您的方法是静态的或最终的),您的结果会与结果兼容。这意味着在没有可以使用的情况下使用匹配器;因此,“0匹配预期,1记录”。

答案 1 :(得分:1)

可能无关,但是在侦查包私有方法时遇到了相同的错误。将其更改为公开为我解决了这个问题。

答案 2 :(得分:0)

如果具有默认参数,则可以在Scala中重现同样的问题。看起来您为每个参数都提供了any(),但是您应该确认方法定义中没有任何默认参数,这可能会使事情搞砸。