JAVA

Mock 객체 확인

응디 2022. 12. 15. 16:24

verify(검증) 메소드를 이용하여 특정 메소드가 실행이 됐는지, 몇번 실행됐는지, 실행이 안됐는지 등 검증을 해볼 수 있다.

 

verify 예제

    @Test
    public void pratice(){
        StudyService studyService = new StudyService(memberService, studyRepository);
        assertNotNull(studyService);

        Study study = new Study(10, "test");

        Member member = new Member();
        member.setId(1L);
        member.setEmail("eunjia190@gmail.com");

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

        studyService.createNewStudy(1L, study);

        assertNotNull(study.getOwner());

        // memberService Mock 에 있는 것 중 딱 한번 notify가 호출이 됐어야한다. 호출이 안됐으면 exception 발생
        verify(memberService, times(1)).notify(study);
        verify(memberService, times(1)).notify(member);

        // 몇번 호출 되는지도 확인 가능함( never : 한번도 사용되지 않음 )
        verify(memberService, never()).validate(any());

        // 호출 순서도 테스트 할 수 있음(순차적으로 테스트 할 것) : study가 먼저 호출되고 member가 나중에 호출 되는지 확인
        // 순서까지는 굳이 테스트 안해도 됨
        InOrder inOrder = inOrder(memberService);
        inOrder.verify(memberService).notify(study);
        inOrder.verify(memberService).notify(member);

        // 더이상 테스트를 진행 할 필요가 없다.
        verifyNoMoreInteractions(memberService);

    }

 

verify의 times(1)

: 메소드가 정해진 만큼 호출이 됐는지 검증한다.(never는 한번도 호출이 되지 않는 경우)

 

InOrder는 메소드 호출 순서 검증을 위해 사용한다. (굳이 사용은 잘 안함)

: 검증 하고싶은 순서대로 verify를 사용하여 작성해 주면 된다.

 

verifyNoMoreInteractions 이 나오면 더이상 검증할 필요가 없다는 말이므로 그 이후에 메서드를 호출하는 경우가 있으면 테스트가 실패한다.

 

만약 times(1)인데 한번도 호출되지 않았다면 아래와 같은 에러가 발생한다.

'JAVA' 카테고리의 다른 글

int 와 long  (0) 2022.12.27
BDD 스타일 Mockito API  (0) 2022.12.26
Mock 객체 stubbing  (0) 2022.12.15
Mockito  (0) 2022.12.14
JUnit5 Assertions  (0) 2022.12.14