백기선(인프런 강의)/더 자바, 애플리케이션을 테스트하는 다양한 방법
Mock 객체 Stubbing
레알윙
2020. 5. 27. 23:55
반응형
https://github.com/keesun/inflearn-the-java-test
위사이트에 들어가서 테스트코드 다운로드 16번째로 commit한거
Mock 객체의 행동
- null을 리턴 (Optional 타입은 Optional.empty 리턴)
- Primitive 타입은 기본 Primitive값
- boolean 은 false
- long 0
- 콜렉션은 비어있는 콜렉션
- Void메소드는 예외를 던지지 않고 아무런 일도 발생하지 않는다.
Mock 객체를 조작해서
- 특정한 매개변수를 받은 경우 특정한 값을 리턴하거나 예뢰를 던지도록 만들 수 있다.
- How about some subbing?
- 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
- How about some subbing?
- Void 메소드 특정 매개변수를 받거나 호출된 경우 예외를 발생 시킬 수 있다.
- Subbing void methods with exceptions
- https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html#5
- Subbing void methods with exceptions
- 메소드가 동일한 매개변수로 여러번 호출될 때 각기 다르게 행동호도록 조작할 수도 있다.
- Stubbing consecutive calls
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import me.whiteship.inflearnthejavatest.domain.Member;
import me.whiteship.inflearnthejavatest.member.MemberService;
@ExtendWith(MockitoExtension.class)
class StudyServiceTest {
@Test
void createNewStudy(@Mock MemberService memberService,
@Mock StudyRepository studyRepository) {
StudyService studyService = new StudyService(memberService, studyRepository);
assertNotNull(studyService);
Member member = new Member();
member.setId(1L);
member.setEmail("rlawls1991@mail.com");
when(memberService.findById(any()))
.thenReturn(Optional.of(member))
.thenThrow(new RuntimeException())
.thenReturn(Optional.empty());
Optional<Member> byId = memberService.findById(1L);
assertEquals("rlawls1991@mail.com", byId.get().getEmail());
assertThrows(RuntimeException.class, () -> {
memberService.findById(2L);
});
assertEquals(Optional.empty(), memberService.findById(3L));
}
}
반응형