728x90
Mockito
- Mock : 진짜 객체와 비슷하게 동작하지만 프로그래머가 직접 그 객체의 행동을 관리하는 객체
- Mockito : Mock 객체를 쉽게 만들고면서 관리하고 검증하는 방법을 제공하는 것
Mock 활용하여 테스트 작성시 방법
- Mock을 만드는 방법
- Mock을 조작하는 방법
- Mock을 확인하는 방법
Mock을 만드는 방법
@ExtendWith(MockitoExtension.class)
class UserServiceTest {
@Mock
UserService userService;
@Mock
userRepository userRepository;
@Test
void createStudyService() {
UserService userService = new userService(userRepository);
assertNotNull(studyService);
}
}
- 방법은 여러가지가 있으나 보편적으로는 Mock 애노테이션을 사용해서 만듬
- @ExtendWith에서 MockitoExtension.class를 사용해야 Junit5와 Mockito가 연동이 됨
Mock을 조작하는 방법
모든 Mock 객체의 행동
- null을 반환함 (Optional인 경우는 Optional.empty로 반환)
- 기본 타입의 값
- 콜렉션은 비어있는 콜렉션
- void 메소드는 예외를 던지지 않고 아무일도 발생 안함
Stubbing
@Mock UserService userService;
User user = new User();
user.setId(1L);
user.setEmail("abc@abc.com");
//Mock객체를 Stubbing
when(userService.findById(1L)).thenReturn(Optional.of(user));
- Mock 객체의 행동을 조작하는 것, 즉 모의 객체 생성 및 모의 객체 동작을 지정하는 과정
- Mock 객체의 when 메소드를 활용하여 stubbing을 함
- stubbing하였으면 어떤 결과를 반환하라고 정해진 답변을 준비해야함, thenReturn으로 예상되는 반환 정의함 (그외 다른 반환 방법으로는 doThrow 등이 있음)
Argument Matchers
when(userService.findById(any())).thenReturn(Optional.of(user));
- 함수의 argument type으로 아무 type을 주고 싶은 경우, Mockito의 argument matchers를 사용하면 됨
- 참고 : https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/ArgumentMatchers.html
Mock을 확인하는 방법
verify(userService, times(1)).notify(study)
- verify : 메소드를 사용하는지 확인
- notify : 특정 메소드가 몇번 호출되었는지 확인
- mock 객체 userService의 notify가 한번 호출되어야함
Mockito 어노테이션 요약
어노테이션 | 요약 |
Mock | 실제 인스턴스 없이 가상의 mock 인스턴스를 직접 만들어서 사용 |
Spy | 실제 인스턴스를 사용해서 mocking하여 사용, 행위를 지정하지 않으면 객체를 만들 경우 실제 인스턴스의 메소드를 호출함 |
InjectMock | Mock이나 Spy 객체를 자신의 멤버클래스와 일치하는 경우 자동으로 주입함 |
추가 확인 정보는 https://github.com/mockito/mockito/wiki/Mockito-features-in-Korean 참고
'SPRING' 카테고리의 다른 글
[SPRING] JPA 고아객체 (0) | 2022.06.06 |
---|---|
[SPRING] JPA 영속성 전이 (0) | 2022.06.06 |
[SPRING] WEBFLUX 리액티브 오퍼레이션 정리 (0) | 2022.05.08 |
[SPRING] JPA 쿼리메소드 요약 (0) | 2022.04.19 |
[SPRING] Bean 생명주기 콜백 (PostConstruct / PreDestory) (0) | 2022.03.02 |