더 자바, 애플리케이션을 테스트하는 다양한 방법

Ch02. Mockito - Mock 객체 확인

webmaster 2022. 1. 5. 14:00
728x90
  • Mock 객체가 어떻게 사용이 됐는지 확인할 수 있다.
    • 특정 메서드가 특정 매개변수로 몇 번 호출되었는지, 최소 한 번은 호출됐는지, 전혀 호출되지 않았는지
      • Verifying exact number of invocations 
    • 어떤 순서대로 호출했는지
      • Verification in order 
    • 특정 시간 이내에 호출됐는지 
      • Verification with timeout 
    • 특정 시점 이후에 아무 일도 벌어지지 않았는지
      • Finding redundant invocations
@Test
void verification(@Mock MemberService memberService, @Mock StudyRepository studyRepository){
    StudyService studyService = new StudyService(memberService,studyRepository);
    Study study = new Study(10, "테스트");
    Member member = new Member(1L,"KKK");

    when(memberService.findById(1L)).thenReturn(Optional.of(member));
    when(studyRepository.save(isA(Study.class))).thenReturn(study);

    studyService.createNewStudy(1L, study);

    assertNotNull(study.getOwner());
    //Notify가 몇번 호출 된지 확인 가능
    //해당 함수를 몇번 호출 되는지
    verify(memberService, times(1)).notify(study);

    verify(memberService, times(1)).notify(member);
    verify(memberService, never()).validation(any());


    InOrder inOrder = inOrder(memberService);
    inOrder.verify(memberService).notify(study); //순서대로 적어주면 된다.
    inOrder.verify(memberService).notify(member);

    verifyNoMoreInteractions(memberService);
    //verifyNoMoreInteractions(memberService); //어떤한 interactions 도 일어나면 안된다.

    //TimeOut 과 같은 시간 제약을 걸수도 있다.
}

 

728x90