모든 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 |