티스토리 뷰
반응형
Mock 객체 Stubbing
Mock 객체의 행동이란,
- 리턴 값이 있는 메소드는 모두 Null 을 리턴하고 있다.
- Optional 타입인 경우 Optional.empty로 리턴
- Primitive 타입은 모두 Primitive 값을 따르고 있다.
- Ex. Boolean인 경우 'false' / Integer 혹은 Long인 경우 0
- Collection의 경우 모두 비어있는 Collection을 가지고 있다.
- Void 메소드의 경우 예외를 던지지 않고 아무 일도 발생하지 않는다.
Stubbing이란,
- Mock 객체의 행동을 조작하는 것을 말한다.
- Mock객체의 when 메소드를 활용하여 Stubbing을 진행해보자.
- Ex. 리턴값이 있는 when 메소드 활용 1
@Mock MemberService memberService memberService.findById(1L); //위 메소드를 호출할 때 아래와 같은 인스턴스를 받고 싶다면... Mock객체를 통해서 Stubbing을 하여 받을 수 있다. Member member = new Member(); member.setId(1L); member.setEmail("abc@gmail.com"); //Mock객체를 Stubbing Mockito.when(memberService.findById(1L)).thenReturn(Optional.of(member));
- Ex. 리턴값이 있는 when 메소드 활용 2(Service단 로직의 리턴값을 Stubbing을 활용하여 반환해보자.)
- studyService.createNewStudy(1L, study)를 호출하여 우리가 선언한 Member 인스턴스의 값이 반환되는 지 확인해보자.
-
assertEquals("abc@gmail.com", memberService.findById(1L).get().getEmail());
- 그러나 만약 memberService.findById()의 값이 '1L'이 아닌 다른 값이면 stubbing한 Member 인스턴스가 반환되지 않으니 주의해야한다.
- 단, any()를 사용하게 되면 어떤 변수가 들어와도 stubbing한 Member 인스턴스를 반환할 수 있다.
- assertEquals("abc@gmail.com", memberService.findById(any()).get().getEmail());
- any() 뿐만 아니라 다양한 ArgumentMatchers 사용 가능
- https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/ArgumentMatchers.html
- studyService.createNewStudy(1L, study)를 호출하여 우리가 선언한 Member 인스턴스의 값이 반환되는 지 확인해보자.
- Ex. 예외를 던지는 when 메소드 활용 1
-
//Mockito.when() 활용 when(memberService.findById(1L)).thenThrow(new RuntimeException()); //Mockito.doThrow() 활용 doThrow(new IllegalAccessError()).when(memberService).validate(1L); assertThrows(IllegalArgumentException.class, () -> { memberService.validate(1L); });
-
- Ex. 리턴값 or 예외를 던지는 when 메소드 활용 (stubbing한 메소드를 반복 호출할 때의 순서에 따른 결과물을 다르게 나타낼 수 있음)
-
when(memberService.findById(any())) .thenReturn(Optional.of(member)) .thenThrow(new RuntimeException()) .thenReturn(Optional.empty()); //thenReturn Optional<Member> byId = memberService.findById(1L); assertEquals("abc@gmail.com", byId.get().getEmail()); //thenThrow assertThrows(RuntimeException.class, () -> { memberService.findById(2L); }); //thenReturn assertEquals(Optional.empty(), memberService.findById(3L));
-
https://www.inflearn.com/course/the-java-application-test/dashboard
반응형
'Test > Mockito' 카테고리의 다른 글
[Mockito] Mock 객체 만들기 (0) | 2020.02.19 |
---|---|
[Mockito] Mockito (0) | 2020.02.19 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- java8
- 빈 순환 참조
- 인프런
- ifPresent
- Spring
- junit
- 연관관계
- package-private
- effectivejava
- Effective Java
- 자바8
- 이펙티브 자바
- mustache
- flatMap
- 김영한
- jdk버전
- try with resources
- 스프링부트
- try catch finally
- 점층적 생성 패턴
- springboot
- 복사 팩토리
- @Lazy
- java
- 정적팩터리메서드
- 빌더 패턴
- 팩토리 메소드 패턴
- JPA
- 이펙티브자바
- 생성자
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함