2017-02-14 20 views
1

Я хочу проверить параметр, переданный методу ... но проверка должна быть выполнена в третий раз, когда этот метод вызывается.Mockito проверить пропустить несколько вызовов?

Я думал, что ответ может быть идти:

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

... но он не на первой линии:

Но было в 5 раз. Нежелательные призывание:

... потому что на самом деле есть еще 2 звонков после того, меня интересует

+0

Thanks. Раньше я использовал ArgumentCaptor. Я надеялся, что может быть быстрый способ сделать это! –

+0

Я не думаю, что вы найдете что-нибудь более быстрое, чем мой ответ. Разумеется, вы можете использовать аннотацию для создания своего захватчика, если вы чувствуете такую ​​склонность. –

+0

«Но было 5 раз». потому что 'any()' Matcher, используемый в первом проверке, является жадным и соответствует всем вызовам метода. Он не подозревает, что есть другие контрольные вызовы с другими помощниками. –

ответ

1

Используйте аргумент Captor для этого.. Вы можете передать захват, когда вы проверяете, затем вытащите все значения, которые были переданы в качестве параметра для этого метода, и проверьте, какой вы хотите.

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 I *** думаю, что вы пропустили здесь, поэтому я попытаюсь отредактировать ... если я ошибаюсь, извиняюсь. –

+0

Ах да, спасибо, что заметили это. Я всегда забываю эту часть. –