JAVA

Mock 객체 stubbing

응디 2022. 12. 15. 16:12

모든 Mock 객체의 행동

  • Null 을 리턴한다.( Optional 의 경우에는 Optional.empty 리턴 )
  • Primitive 타입은 기본 Primitive 값
  • 콜렉션은 비어있는 콜렉션
  • void 메소드는 예외를 던지지 않고 아무런 일도 발생하지 않는다.

 

stubbing 예제

: when 을 사용하여 findById에 1을 호출하면 member 값을 return 받게 작성해보았다

@Test
void createStudyService(){

        StudyService studyService = new StudyService(memberService, studyRepository);
        assertNotNull(studyService);

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

        // 1 이라는 id 가 호출이 되야만 위에서 셋팅해 놓은 member 값을 return 받을수 있음
        when(memberService.findById(1L)).thenReturn(Optional.of(member));

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

        Optional<Member> findById = memberService.findById(2L);
        assertEquals("eunjia190@gmail.com", findById.get().getEmail());

}

위에 코드는 에러가 난다. when 부분을 보면 1를 호출해야 member 값을 전달하는데 아래 findById 변수는 현재 2를 호출 하고 있으니 exception이 발생한다.

에러 예시

 

아래는 같은 메서드를 여러번 호출할때 stubbing 한 코드이다. 첫번째 호출하면 optional member 를 return,

두번째 호출하면 RuntimeException 발생, 세번째 호출 하면 빈 Optional 을 return 시키는 테스트 코드 이다.

@Test
public void createNewStudy() throws Exception {

        StudyService studyService = new StudyService(memberService, studyRepository);
        assertNotNull(studyService);

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

        when(memberService.findById(any()))
                .thenReturn(Optional.of(member))    // findById를 첫번째로 호출하면 Optional 값으로 member return.
                .thenThrow(new RuntimeException())  // findById를 두번째로 호출하면 RuntimeException을 터뜨리다.
                .thenReturn(Optional.empty());      // findById를 세번째를 호출하면 빈 Optional이 reurn 된다.

       Optional<Member> byId = memberService.findById(1L);  // 첫번째 호출
       assertEquals("eunji@gmail.com", byId.get().getEmail());

       assertThrows(RuntimeException.class, () ->{
           memberService.findById(2L);                         // 두번째 호출
       });

       assertEquals(Optional.empty(), memberService.findById(3L));  // 세번째 호출
}

 

'JAVA' 카테고리의 다른 글

BDD 스타일 Mockito API  (0) 2022.12.26
Mock 객체 확인  (0) 2022.12.15
Mockito  (0) 2022.12.14
JUnit5 Assertions  (0) 2022.12.14
JUnit5 기본 annotation  (0) 2022.12.14