Mockito - 0 Matchers Expected, 1 Recorded (InvalidUseOfMatchersException)

2022-09-03 05:17:42

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

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

运行这个得到的是我:

org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
Invalid use of argument matchers!
预计有0名匹配者,1名记录:
在...GridFileManagerTest.beforeClass(GridFileManagerTest.java:67)

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

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

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

如果我这样做的话:

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

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

思潮?


答案 1

我认为您的结果与如果不是Mockito模拟(或者您的方法是静态或最终的)时发生的结果兼容。这意味着在无法使用匹配器的地方使用匹配器;因此,“预期0个匹配者,1个记录”。dbCollection


答案 2

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