2017-02-14 59 views
1

我想检查传递给方法的参数......但是检查必须在第三次调用此方法时完成。Mockito验证跳过一些电话?

我想答案可能是去:

verify(myMock, times(2)).myMethod(any()); 
verify(myMock).myMethod(paramIWant); 

...但它在第一行失败:

不过是5倍。不希望调用:

...因为确实有一个我感兴趣的

+0

谢谢。我之前使用过ArgumentCaptor。我希望可能有一种快速的方式来做到这一点! –

+0

我不认为你会发现任何比我的回答更快的东西。当然,如果您感觉如此倾向,您可以使用注释来创建捕获器。 –

+0

“但是5次。”是因为在第一次验证中使用的'any()'Matcher是贪婪的并且匹配所有的方法调用。它不知道与其他匹配器有其他验证呼叫。 –

回答

1

使用参数俘虏为此后2个电话。您可以在验证时传递捕获器,然后获取作为参数传递给此方法的所有值,并检查您想要的值。

ArgumentCaptor<SomeClass> myCaptor = ArgumentCaptor.forClass(SomeClass.class); 
verify(myMock,times(5)).myMethod(myCaptor.capture()); 

List<SomeClass> paramsPassed = myCaptor.getAllValues(); 
assertEquals(paramIWant, paramsPassed.get(2)); 
+0

非常感谢。非常活泼,很棒。作为Mockito的新手,我的大部分活动仅限于使用一个类“Mockito”。但是还有其他几百个类,我有时会想知道他们在做什么...例如实现'VerificationMode'的类(即'verify'的第二个参数)。毫无疑问,所有的事情都会随着时间的推移而变得清晰。 –

+0

PS我***觉得***你错过了这里,所以我会尝试编辑......如果我错了,道歉。 –

+0

啊,是的,谢谢你发现。我总是忘记那部分。 –