15

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

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

运行这个得到我:

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

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

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

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

如果我要这样做:

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

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

想法?

4

3 回答 3

22

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

于 2012-07-12T23:00:33.780 回答
5

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

于 2019-12-03T00:20:00.567 回答
1

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

于 2018-07-10T11:02:44.413 回答