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()

이는 모의 객체 에서 메소드 send가 4 번 호출 되었는지 확인 합니다. 호출 횟수가 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.