테스트 코드 작성하시면서 기존 코드 중에 return값이 없는 void 함수나 save, delete 처럼 해당 로직이 제대로 동작했는지 확인을 어떻게 해야 하는지 고민을 하는 사람이 있을 것 같다.

이때, Mockito에서 verify 라는 함수를 제공하여 해당 로직이 동작했는지 확인 할 수 있다.

Mockito.verify(T mock, VerificationMode mode).method()

  • VerificationMode
    • atLeastOnce() - 적어도 한번 수행
    • atLeast(int n) - 적어도 (n)번 수행
    • times(int n) - 무조건 (n)번 수행
    • atMost(int n) - 최대한 (n)번 수행
    • never() - 수행되지 않음

예1)

 //using mock
 mockedList.add("once");

 mockedList.add("twice");
 mockedList.add("twice");

 mockedList.add("three times");
 mockedList.add("three times");
 mockedList.add("three times");

 //following two verifications work exactly the same - times(1) is used by default
 verify(mockedList).add("once");
 verify(mockedList, times(1)).add("once");

 //exact number of invocations verification
 verify(mockedList, times(2)).add("twice");
 verify(mockedList, times(3)).add("three times");

 //verification using never(). never() is an alias to times(0)
 verify(mockedList, never()).add("never happened");

 //verification using atLeast()/atMost()
 verify(mockedList, atMostOnce()).add("once");
 verify(mockedList, atLeastOnce()).add("three times");
 verify(mockedList, atLeast(2)).add("three times");
 verify(mockedList, atMost(5)).add("three times");

예2)

 //using mock
 // given
List<TestDto> oldMockList = Collections.emptyList();

List<TestDto> newMockList = Arrays.asList(
    TestDto.builder().id(1L).build(),
	TestDto.builder().id(2L).build());

// when
... 서비스 로직 실행
// then

verify(specificMockedRepository, never()).delete(any()); // save 로직이 실행 되지 않음
verify(specificMockedRepository).save(newMockList.get(0)); // 해당 delete 로직 실행
verify(specificMockedRepository).save(newMockList.get(1)); // 해당 delete 로직 실행
verify(specificMockedRepository, atLeast(2)).delete(any()); // 해당 delete 로직 최소 한번 이상 실행

1개의 댓글

comment-user-thumbnail
2024년 1월 27일

안녕하세요! 네이버블로그에 작성하신 베어로보틱스에서의 ICT 인턴십 글들을 보고 넘어왔습니다 :D 몇가지 여쭤보고 싶은 점이 있는데, 개인적으로 연락가능한 링크드인 계정이나 메일주소 알려주실 수 있을까요?

답글 달기