웹사이트 검색

Mockito 검증


Mockito Verify 메서드는 특정 동작이 발생했는지 확인하는 데 사용됩니다. 지정된 메서드가 호출되었는지 확인하기 위해 테스트 메서드 코드 끝에 Mockito 검증 메서드를 사용할 수 있습니다.

Mockito 검증

  • Mockito verify() 메서드는 메서드 호출 횟수를 테스트하는 데에도 사용할 수 있습니다. 모의 메서드에 대해 정확한 횟수, 최소 한 번, 최대 호출 횟수를 테스트할 수 있습니다.
  • 모든 verify() 메서드 호출 후에 verifyNoMoreInteractions()를 사용하여 모든 것이 확인되었는지 확인할 수 있습니다. 메서드 확인이 아직 남아 있으면 실패하고 적절한 메시지를 제공합니다.
  • verifyZeroInteractions() 동작은 verifyNoMoreInteractions() 메서드와 동일합니다.
  • inOrder() 메서드를 사용하여 메서드 호출 순서를 확인할 수 있습니다. 메서드 호출을 건너뛸 수 있지만 확인 중인 메서드의 순서는 동일해야 합니다.

mockito 검증 방법 예제 중 일부를 살펴보겠습니다.

Mockito verify() 간단한 예제

@Test
void test() {
	List<String> mockList = mock(List.class);
	mockList.add("Pankaj");
	mockList.size();
	
	verify(mockList).add("Pankaj");
}

위의 verify 메서드는 add(\Pankaj\)가 모의 목록 객체에서 한 번만 호출되면 통과합니다. verify 메서드로 times(1) 인수로 호출하는 것과 같습니다.

verify(mockList, times(1)).size();

메서드가 호출되었는지 확인하고 싶지만 인수에 대해 신경쓰지 않는 경우 ArgumentMatchers를 verify 메서드와 함께 사용할 수 있습니다.

verify(mockList).add(anyString());
verify(mockList).add(any(String.class));
verify(mockList).add(ArgumentMatchers.any(String.class));

org.mockito.Mockito 클래스는 Mockito 프레임워크에서 대부분의 유용한 메서드에 대한 정적 메서드를 제공하며, 이는 import static을 사용하여 가져옴으로써 유창한 코드를 작성하는 데 도움이 됩니다.

횟수로 Mockito 검증

Mockito verify() 메서드가 오버로드되고 두 번째는 verify(T mock, VerificationMode mode)입니다. 호출 횟수를 확인하는 데 사용할 수 있습니다.

verify(mockList, times(1)).size(); //same as normal verify method
verify(mockList, atLeastOnce()).size(); // must be called at least once
verify(mockList, atMost(2)).size(); // must be called at most 2 times
verify(mockList, atLeast(1)).size(); // must be called at least once
verify(mockList, never()).clear(); // must never be called

verifyNoMoreInteractions()

이 메서드는 모든 상호 작용이 확인되었는지 확인하기 위해 모든 verify 메서드 후에 사용할 수 있습니다. 모의 개체에 확인되지 않은 상호 작용이 있는 경우 테스트에 실패합니다.

// all interactions are verified, so below will pass
verifyNoMoreInteractions(mockList);
mockList.isEmpty();
// isEmpty() is not verified, so below will fail
verifyNoMoreInteractions(mockList);

verifyNoMoreInteractions()의 두 번째 호출은 다음과 같은 오류 메시지와 함께 실패합니다.

org.mockito.exceptions.verification.NoInteractionsWanted: 
No interactions wanted here:
-> at com.journaldev.mockito.verify.MockitoVerifyExamples.test(MockitoVerifyExamples.java:36)
But found this interaction on mock 'list':
-> at com.journaldev.mockito.verify.MockitoVerifyExamples.test(MockitoVerifyExamples.java:34)
***
For your reference, here is the list of all invocations ([?] - means unverified).
1. -> at com.journaldev.mockito.verify.MockitoVerifyExamples.test(MockitoVerifyExamples.java:18)
2. -> at com.journaldev.mockito.verify.MockitoVerifyExamples.test(MockitoVerifyExamples.java:19)
3. [?]-> at com.journaldev.mockito.verify.MockitoVerifyExamples.test(MockitoVerifyExamples.java:34)

Mockito의 뛰어난 기능 중 하나는 예외 메시지입니다. 테스트가 실패한 부분을 명확하게 지적하여 쉽게 수정할 수 있습니다.

verifyZeroInteractions()

verifyZeroInteractions() 메서드 동작은 verifyNoMoreInteractions() 메서드와 동일합니다.

Map mockMap = mock(Map.class);
Set mockSet = mock(Set.class);
verify(mockList).isEmpty();
verifyZeroInteractions(mockList, mockMap, mockSet);

Mockito 검증 전용 메서드 호출

하나의 메서드만 호출되는지 확인하려면 verify 메서드와 함께 only()를 사용할 수 있습니다.

Map mockMap = mock(Map.class);
mockMap.isEmpty();
verify(mockMap, only()).isEmpty();

Mockito 호출 순서 확인

InOrder를 사용하여 호출 순서를 확인할 수 있습니다. 확인을 위해 모든 메서드를 건너뛸 수 있지만 확인 중인 메서드는 동일한 순서로 호출되어야 합니다.

InOrder inOrder = inOrder(mockList, mockMap);
inOrder.verify(mockList).add("Pankaj");
inOrder.verify(mockList, calls(1)).size();
inOrder.verify(mockList).isEmpty();
inOrder.verify(mockMap).isEmpty();

요약

Mockito verify() 메서드를 사용하여 모의 개체 메서드가 호출되고 있는지 확인할 수 있습니다. 메서드 호출이 실수로 삭제된 경우 verify 메서드에서 오류가 발생합니다.

GitHub 리포지토리에서 더 많은 Mockito 예제를 볼 수 있습니다.