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 예제를 볼 수 있습니다.