当前位置: 首页 > 知识库问答 >
问题:

Mockito-应为0个匹配器,记录了1个(InvalidUseOfMatchersException)

毕宇
2023-03-14

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

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

运行这个获取的是我:

组织。莫基托。例外。滥用。InvalidUseOfMatchers异常:
参数匹配器的使用无效
需要0个匹配者,记录了1个:
在。。。GridFileManagerTest。上课前(GridFileManagerTest.java:67)

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

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

有关详细信息,请参阅匹配器类的javadoc。

如果我这么做:

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

它不再有这个问题了。但这似乎并没有达到我想要的效果——我想在使用DBObject类型的对象调用该方法时返回值。

思想?

共有3个答案

葛修永
2023-03-14

可能不相关,但我在发现包私有方法时遇到了相同的错误。把它改成公开版对我来说解决了这个问题。

楮景明
2023-03-14

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

贲言
2023-03-14

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

 类似资料:
  • 问题内容: 我正在尝试模拟一些mongo类,以便不需要连接(相当标准的东西),但是以下代码给我带来了问题: 运行这个得到我: org.mockito.exceptions.misusing.InvalidUseOfMatchersException: 参数匹配器的无效使用! 预期0个匹配器,记录1个: 在… GridFileManagerTest.beforeClass(GridFileManag

  • 由此我从NetBeans得到以下错误消息: 所有异常消息都写入控制台,包括用户日志的消息。所以我知道两个伐木工都在工作。记录器附加器写入文件OK。userLog记录器不会创建任何文件,它使用几乎相同的附加器。 看来我还没有正确地命名一些东西来允许log4j2找到记录器。我试过各种命名的组合来弄对它,但我搞不清问题出在哪里。 我必须在每个类的记录器初始化中包含类名吗? 编辑:我需要包含包名。我花了一

  • 看起来,当我这样使用thenReturn时: 当(abc.call())。然后返回(a)。然后返回(b), 我期望: 验证(abc,次(2))。调用() 相反,该方法似乎只被调用了一次,我有点困惑(我的测试工作如预期的那样,mock似乎返回了我预期的值),但对于调用次数,我不知道我是否得到了错误的结果,或者这是Mockito的预期行为?

  • //jpa存储库代码到crud操作 @query(value=“select*from flatdetails fd inner join vehicledetailsid=veh.FlatDetailsid where veh.registrationNumber like%?1%and fd.tenantid=?2”,nativeQuery=true)列出findByRegistrationN

  • 我有麻烦配置我的log4j2.xml文件包括Hibernate日志记录。 这是我的xml文件: 在启动我的罐子时,我会将以下内容打印到控制台: 我似乎从我的应用程序中获取日志到我的滚动文件中,但我不明白为什么这个hibernate记录器没有使用相同的appender。 非常感谢您的帮助!

  • 本文向大家介绍在MySQL中将TRUE FALSE记录显示为0 1,包括了在MySQL中将TRUE FALSE记录显示为0 1的使用技巧和注意事项,需要的朋友参考一下 将列设置为BOOLEAN以显示0和1值。让我们创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出-