Mockito - 预期 0 个匹配器,记录 1 个(InvalidUseOfMatchersException)
我正在尝试模拟一些 mongo 类,以便不需要连接(相当标准的东西),但以下代码给我带来了问题:
I'm trying to mock up some mongo classes so that I don't need a connection (fairly standard stuff) but the following code gives me problems:
when(dbCollection.find(isA(DBObject.class))).thenReturn(dbCursor);
运行这个得到我:
org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
参数匹配器的使用无效!
预期 0 个匹配器,记录 1 个:
在 ...GridFileManagerTest.beforeClass(GridFileManagerTest.java:67)
org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
Invalid use of argument matchers!
0 matchers expected, 1 recorded:
at ...GridFileManagerTest.beforeClass(GridFileManagerTest.java:67)
如果匹配器与原始值组合,则可能会发生此异常:
//不正确:someMethod(anyObject(), "raw String");
This exception may occur if matchers are combined with raw values:
//incorrect: someMethod(anyObject(), "raw String");
使用匹配器时,所有参数都必须由匹配器提供.
例如:
//正确:
someMethod(anyObject(), eq("String by matcher"));
When using matchers, all arguments have to be provided by matchers.
For example:
//correct:
someMethod(anyObject(), eq("String by matcher"));
有关更多信息,请参阅 Matchers 类的 javadoc.
For more info see javadoc for Matchers class.
如果我这样做:
when(dbCollection.find(mock(DBObject.class))).thenReturn(dbCursor);
它不再有这个问题.这似乎并没有完成我想要的 - 我想在使用 DBObject 类型的对象调用该方法时返回该值.
it no longer has that problem. This doesn't seem to accomplish what I want though - I want to return the value when the method is called with an object of type DBObject.
想法?
推荐答案
我认为你的结果与如果 dbCollection
不是 Mockito-mock (或者你的方法是静态的)会发生的结果兼容或最终).这意味着在无法使用匹配器的地方使用匹配器;因此预期 0 个匹配器,记录 1 个".
I think your results are compatible with the result that would happen if dbCollection
is not a Mockito-mock (or your method is static or final). That would mean that a matcher is being used where none can be used; hence the "0 matchers expected, 1 recorded".
相关文章