Mockito-需要0个匹配器,记录了1个(InvalidUseOfMatchersException)



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

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

运行这个get就是我:

org.mockito.exceptions.missing.InvalidUseOfMatchersException:
参数匹配器的使用无效
需要0个匹配者,记录了1个:
在GridFileManagerTest.bforeClass(GridFileManagerTest.java:67)

如果匹配器与原始值组合,则可能发生此异常:
//不正确:someMethod(anyObject(),"原始字符串");

使用匹配器时,所有参数都必须由匹配器提供
例如:
//正确:
someMethod(anyObject(),eq("匹配器字符串");

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

如果我要这样做:

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

它不再有那个问题了。不过,这似乎并没有达到我想要的目的——当用DBObject类型的对象调用该方法时,我想返回值。

想法?

我认为您的结果与如果dbCollection不是Mockito mock(或者您的方法是静态的或最终的)会发生的结果是兼容的。这意味着在没有火柴的地方使用火柴;因此出现了"0个匹配器,1个已记录"。

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

在我的例子中,模拟的方法是final。从方法签名中删除final解决了这个问题。

可能不相关,但我在发现包私有方法时遇到了同样的错误。将其更改为公共解决了我的问题。

当我四处移动测试并在存根时使用实际对象而不是模拟时,也会发生这种情况

相关内容

  • 没有找到相关文章

最新更新