我有一个被调用两次的方法,我想捕获第二个方法调用的参数 .
这是我尝试过的:
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
第二次调用的参数?
5 回答
我认为应该是
样本来自mockito javadoc:
从Mockito 2.0开始,也有可能使用静态方法Matchers.argThat(ArgumentMatcher) . 在Java 8的帮助下,它现在更清晰,更易读:
如果你与较低的Java版本绑定,那么也不是那么糟糕:
当然,没有一个可以验证调用的顺序 - 你应该使用InOrder:
请查看mockito-java8项目,该项目可以拨打以下电话:
如果您不想验证对
doSomething()
的所有调用,只有最后一次调用,则可以使用ArgumentCaptor.getValue()
. 根据Mockito javadoc:如果多次调用该方法,则返回最新捕获的值
所以这可行(假设
Foo
有一个方法getName()
):您还可以使用@Captor带注释的ArgumentCaptor . 例如:
使用Java 8的lambdas,一种方便的方法是使用