티스토리 뷰
반응형
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 인스턴스의 값이 반환되는 지 확인해보자.
mockito-core 3.11.1 javadoc (org.mockito)
Latest version of org.mockito:mockito-core https://javadoc.io/doc/org.mockito/mockito-core Current version 3.11.1 https://javadoc.io/doc/org.mockito/mockito-core/3.11.1 package-list path (used for javadoc generation -link option) https://javadoc.io/doc/org
javadoc.io
- 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
더 자바, 애플리케이션을 테스트하는 다양한 방법 - 인프런 | 강의
자바 프로그래밍 언어를 사용하고 있거나 공부하고 있는 학생 또는 개발자라면 반드시 알아야 하는 애플리케이션을 테스트하는 다양한 방법을 학습합니다., 그냥 개발자를 넘어 '더 나은 개발
www.inflearn.com
반응형
'Test > Mockito' 카테고리의 다른 글
[Mockito] Mock 객체 만들기 (0) | 2020.02.19 |
---|---|
[Mockito] Mockito (0) | 2020.02.19 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- effectivejava
- 이펙티브자바
- 생성자
- java
- springboot
- Effective Java
- package-private
- 김영한
- ifPresent
- 복사 팩토리
- 연관관계
- junit
- Spring
- 인프런
- 점층적 생성 패턴
- 빌더 패턴
- 이펙티브 자바
- @Lazy
- JPA
- 정적팩터리메서드
- 자바8
- mustache
- 스프링부트
- try catch finally
- try with resources
- flatMap
- jdk버전
- java8
- 빈 순환 참조
- 팩토리 메소드 패턴
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함