当前位置: 首页 > 面试题库 >

Mockito可以捕获多次调用的方法的参数吗?

冯福
2023-03-14
问题内容

我有一个被调用两次的方法,并且我想捕获第二个方法调用的参数。

这是我尝试过的:

ArgumentCaptor<Foo> firstFooCaptor = ArgumentCaptor.forClass(Foo.class);
ArgumentCaptor<Foo> secondFooCaptor = ArgumentCaptor.forClass(Foo.class);
verify(mockBar).doSomething(firstFooCaptor.capture());
verify(mockBar).doSomething(secondFooCaptor.capture());
// then do some assertions on secondFooCaptor.getValue()

但是我得到一个TooManyActualInvocations例外,因为Mockito认为doSomething应该只调用一次。

如何验证第二个调用的参数doSomething


问题答案:

我认为应该

verify(mockBar, times(2)).doSomething(...)

来自嘲笑javadoc的示例

ArgumentCaptor<Person> peopleCaptor = ArgumentCaptor.forClass(Person.class);
verify(mock, times(2)).doSomething(peopleCaptor.capture());

List<Person> capturedPeople = peopleCaptor.getAllValues();
assertEquals("John", capturedPeople.get(0).getName());
assertEquals("Jane", capturedPeople.get(1).getName());


 类似资料:
  • 问题内容: 有没有一种方法可以使存根方法在后续调用中返回不同的对象?我想这样做是为了测试来自的不确定响应。即,不管方法的返回顺序如何进行测试,结果都保持恒定。 我要测试的代码看起来像这样。 问题答案: 你可以使用方法来做到这一点(与链接时): 或使用等效的静态doAnswer方法:

  • 问题内容: 我有一个类是SUT,一个类是它的合作者。电话上以“ ”作为参数。然后,将为此添加更多元素,以使其状态与调用时的状态不同。这是我的测试用例。 请注意,协作者实际上是一个间谍对象,而不是模拟对象。该测试用例将失败,因为即使使用等于的参数调用了该测试用例,也因为它被修改了,并且其当前值不再等于。但是,这是应该工作的方式,所以我想知道是否有一种方法可以让Mockito在调用方法时存储参数快照,

  • 我想模拟特定参数的方法调用并为其他参数调用真正的方法。我有: 这样,我就得到了folderDAO的模拟结果。getFoldersHierarchy(EHierarchyType.CLIENT\u DOC)但是当我尝试用任何其他参数调用它时,我得到了NullPointerException 那么,我做错了什么,或者应该如何只针对特定参数存根方法调用呢? junit-jupiter api: 5.4.

  • 我在使用Java方法时遇到了麻烦。这段代码应该有三种方法。方法1)输入员工人数。方法2)输入每个员工缺勤天数。方法3)计算缺勤天数的平均值。然后,在Main中,应该打印员工人数、缺勤天数和平均缺勤天数。显然,我不明白方法是如何工作的,因为当我运行代码时,用户在提供员工人数、缺勤天数和平均缺勤天数之前,会被询问4倍的员工人数和2倍的员工缺勤天数。如何更改代码,以便用户只需输入一次信息?

  • 我刚开始使用Mockito,我正在验证某个方法应该用特定的参数调用,而所有的值类型参数(int、String、enum等)都可以验证,但引用/类类型参数似乎没有,下面是一个示例 那么,我如何将引用对象传递到我的输入方法中,并在这里将其模拟为我的内部方法的返回值呢?顺便说一句,如果我的方法只包含值类型参数,它将工作...

  • 不存在从“lambda[]void(GLFWwindow*window,int key,int scancode,int action,int mods)->void”到glfwkeyfun“的适当转换函数 我是漏掉了什么还是这段代码只是无效?