Java가 void 메소드를 Mockito로 n 번 호출하는지 확인


140

(void) 메소드가 DAO 내부에서 호출되고 있는지 확인하려고합니다. 커밋 포인트를 사용하여 해당 포인트까지 결과 목록을 보내고 목록을 재설정하고 계속합니다. 목록에 4 가지가 있고 커밋 지점이 1이라고 가정하면 "보내기"방법이 4 번 호출 될 것으로 예상합니다. 메소드를 작성하여 메소드가 한 번 호출되는지 확인할 수 있습니다.

Mockito.verify(mock).send()

통과합니다. 그러나 호출 횟수를 확인하고 싶습니다. 나는 그렇게 생각할 것이다

Mockito.verify(mock.send(), times(4))

충분하지만 매개 변수가 확인에 적합하지 않다고 말합니다.

내가 변경하는 경우 또한, Mockito.verify(mock).send()Mockito.verify(mock.send())Mockito.verify((mock).send())나는 같은 오류가 발생합니다. 이것에 대한 생각?


10
시도하십시오 Mockito.verify(mock, times(4)).send(). 왜 send()메소드 내부에서 verify메소드 호출 을 "이동"했는지 궁금 합니다 . 이미 올바른 구문을 가지고 있습니다.
Tom


또한 몇 번이나 불려지는 것을 신경 쓰지 않으면 다음과 같이 쓸 수 있습니다.verify(mock, atLeastOnce()).send();
Dawood ibn Kareem

고마워요. 맞습니다. 내가 혼란스럽게 한 것은 Mockito.verify(mock).send()통과되었지만 캡슐화하면 오류가 발생하여 아무것도 변경되지 않는다는 것입니다. 그러나 승리입니다!
nbpeth

답변:


237

필요한 방법은 Mockito # verify입니다 .

public static <T> T verify(T mock,
                           VerificationMode mode)

mock당신의 조롱 객체이고 mode는 IS VerificationMode모의를 확인하는 방법을 설명하는. 가능한 모드는 다음 같습니다.

verify(mock, times(5)).someMethod("was called five times");
verify(mock, never()).someMethod("was never called");
verify(mock, atLeastOnce()).someMethod("was called at least once");
verify(mock, atLeast(2)).someMethod("was called at least twice");
verify(mock, atMost(3)).someMethod("was called at most 3 times");
verify(mock, atLeast(0)).someMethod("was called any number of times"); // useful with captors
verify(mock, only()).someMethod("no other method has been called on the mock");

메소드와 이러한 검증 모드 Mockito를 사용하려면 클래스에서 정적 가져 오기가 필요 verify합니다.

import static org.mockito.Mockito.atLeast;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.atMost;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.only;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;

따라서 귀하의 경우 올바른 구문은 다음과 같습니다.

Mockito.verify(mock, times(4)).send()

이는 모의 객체 에서 메소드 send4 번 호출 되었는지 확인 합니다. 호출 횟수가 4 회 미만이면 실패합니다.


확인하려는 경우 메소드가 한 번 호출 된 경우을 전달할 필요가 없습니다 VerificationMode. 간단한

verify(mock).someMethod("was called once");

충분할 것입니다. 내부적으로 사용합니다 verify(mock, times(1)).someMethod("was called once");.


"사이에"확인을 달성하기 위해 동일한 모의에 대해 여러 개의 확인 호출을 가질 수 있습니다. Mockito는 이와 같은 것을 지원하지 verify(mock, between(4,6)).someMethod("was called between 4 and 6 times");않지만 우리는 쓸 수 있습니다.

verify(mock, atLeast(4)).someMethod("was called at least four times ...");
verify(mock, atMost(6)).someMethod("... and not more than six times");

대신 같은 행동을 취하십시오. 경계가 포함 되므로 메서드를 4, 5 또는 6 회 호출했을 때 테스트 사례가 녹색입니다.


1
VerificationMode정적 가져 오기 또는 명시 적 참조를 위해 메소드가 있는 위치를 찾으려면 누구나 안에 org.mockito.internal.verification.VerificationModeFactory있습니다.
Steve Chambers

verify(mock, atLeast(0)).someMethod("was called any number of times");통화 검증 무시 도움이되었다
TJ-홈

2
verify(between(m,n))m과 n 사이의 호출 수를 확인하는 것과 같은 것이 있습니까?
nishant

2
아니 @nishant, Mockito는를 지원하지 않는 것,하지만 당신은 호출 할 수 있습니다 verify와 배 atLeast(M)atMost(n)같은 동작을 얻을 수 있습니다. 설명을 해답을 편집했습니다.
Tom

@KevinWelker 맞습니다 VerificationModeFactory.에 대한 정보를 삭제했습니다 . 최신 버전에서도 계속 사용할 수 있지만 내부 클래스를 사용해서는 안된다는 데 동의합니다.
Tom
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.