모든 Mock 객체의 행동
-
Null을 리턴한다. (Optional 타입은 Optional.empty 리턴)
Optional<Member> optional = memberService.findById(1L);
assertNull(optional);
-
Primitive 타입은 기본 Primitive 값.
-
콜렉션은 비어있는 콜렉션.
-
Void 메소드는 예외를 던지지 않고 아무런 일도 발생하지 않는다.
memberService.validate(1L);
- 아무일도 일어나지 않는다.
Stubbing
특정 객체(원하는 객체) 를 리턴하게끔 설계하는? 방법
Member member = new Member();
member.setId(1L);
member.setEmail("rownsdn912@gmail.com");
나는 이러한 객체에 대한 리턴 값을 원한다!
memberService의 id가 1L일때 위의 인스턴스에 정의된 객체를 리턴해준다.
when(memberService.findById(1L)).thenReturn(Optional.of(member));
(테스트)
memberService의 id가 1L일때 해당 값이 제대로 찍히는지 테스트
Optional<Member> findbyId = memberService.findById(1L);
assertEquals("rownsdn912@gmail.com", findbyId.get().getEmail());
파라미터에 상관없이 테스트하는 방법 (위의 경우에는 1L을 파라미터로 던져야만 테스트가 성공한다.)
- with any()
when(memberService.findById(any())).thenReturn(Optional.of(member));
https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html#3
예외를 던지는 방법 (when, doThrow, assertThrows)
-
when : memberService의 id가 1L 경우 예외 발생 - 리턴타입이 있는 메서드를 확인할때
when(memberService.findById(1L)).thenThrow(new RuntimeException());
- doThrow : 예외를 던지는 경우는 memberService의 id가 1L 경우
doThrow(new RuntimeException()).when(memberService).validate(1L);
- assertThrows : 예외를 던진다 memberService의 id가 1L 경우
assertThrows(IllegalArgumentException.class, ()->{
memberService.validate(1L);
});
메소드가 동일한 매개변수로 여러번 호출될 때
여러번 호출 시 각기 다르게 호출하도록 조작할 수 있다.
//1번째 호출
assertEquals("rownsdn912@gmail.com",byId.get().getEmail());
//2번째 호출
assertThrows(RuntimeException.class, () -> {
memberService.findById(2L);
});
//3번째 호출
assertEquals(Optional.empty(), memberService.findById(3L));
코드 참조
https://github.com/mike6321/PURE_JAVA/tree/master/HowToTest/inflearn-the-java-test
'Java > Test' 카테고리의 다른 글
(Test) BDD 스타일 Mockito API (0) | 2020.01.05 |
---|---|
(Test) Mock 객체 확인 (0) | 2020.01.05 |
(Test) Mock 객체 만들기 (0) | 2020.01.05 |
(Test) Mockito 란? (0) | 2020.01.01 |
(Test) JUit5 - JUnit4 Migration (0) | 2020.01.01 |