728x90
- 모든 Mock 객체의 행동
- Null을 리턴한다. (Optional 타입은 Optional.empty 리턴)
- Primitive 타입은 기본 Primitive 값.
- 컬렉션은 비어있는 컬렉션.
- Void 메소드는 예외를 던지지 않고 아무런 일도 발생하지 않는다.
- Mock 객체를 조작해서
- 특정한 매개변수를 받은 경우 특정한 값을 리턴하거나 예외를 던지도록 만들 수 있다.
- How about some stubbing? : https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html#2
- Argument matchers : https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html#3
- Void 메소드 특정 매개변수를 받거나 호출된 경우 예외를 발생시킬 수 있다
- Subbing void methods with exceptions : https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html#51
- 메소드가 동일한 매개변수로 여러 번 호출될 때 각기 다르게 행동 하도록 조작할 수도 있다.
- Stubbing consecutive calls : https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html#10
- 특정한 매개변수를 받은 경우 특정한 값을 리턴하거나 예외를 던지도록 만들 수 있다.
@Test
void stubbing(
@Mock MemberService memberService
, @Mock StudyRepository studyRepository){
StudyService studyService = new StudyService(memberService,studyRepository);
assertNotNull(studyService);
Member member = new Member();
member.setId(1L);
member.setEmail("xjvmdutl@gmail.com");
//Optional<Member> member = memberService.findById(1L); //비어있는 값이 나온다.
//memberService.validation(2L); //아무런 동작도 하지 않는다.
//1이라는 값으로 findById(1L)을 하게 된다면 Member를 반환한다.
//stubbing
//파라미터를 ArgumentMatcher를 활용하면 더욱 다양하게 사용할 수가 있다.
//리턴 타입이 있는 메소드
//when(memberService.findById(2L)).thenReturn(Optional.of(member));
when(memberService.findById(any())).thenReturn(Optional.of(member));
Study study = new Study(10,"java");
assertEquals("xjvmdutl@gmail.com",memberService.findById(1L).get().getEmail());
assertEquals("xjvmdutl@gmail.com",memberService.findById(2L).get().getEmail());
//when(memberService.findById(1L)).thenThrow(new RuntimeException()); //예외를 던지도록 할수도 있다.
doThrow(new IllegalArgumentException()).when(memberService).validation(1L);
assertThrows(IllegalArgumentException.class , ()->{
memberService.validation(1L);
});
memberService.validation(2L);
when(memberService.findById(any()))
.thenReturn(Optional.of(member)) //처음 호출
.thenThrow(new RuntimeException()) //두번째 호출
.thenReturn(Optional.empty()); //3번쨰 호출
Optional<Member> byId = memberService.findById(1L);
assertEquals("xjvmdutl@gmail.com",byId.get().getEmail());
assertThrows(RuntimeException.class , ()->{
memberService.findById(2L);
});
assertEquals(Optional.empty(), memberService.findById(3L));
}
728x90
'더 자바, 애플리케이션을 테스트하는 다양한 방법' 카테고리의 다른 글
| Ch02. Mockito - BDD 스타일 Mockito API (0) | 2022.01.05 |
|---|---|
| Ch02. Mockito - Mock 객체 확인 (0) | 2022.01.05 |
| Ch02. Mockito - Mock 객체 만들기 (0) | 2022.01.05 |
| Ch02. Mockito - Mockito 시작하기 (0) | 2022.01.05 |
| Ch01. JUnit5 - JUnit5 마이그레이션 (0) | 2022.01.04 |