Mockito란?
Mockito는 개발자가 동작을 직접 제어할 수 있는 가짜(Mock) 객체를 지원하는 테스트 프레임워크.
Mock: 진짜 객체와 비슷하게 동작하지만 그동작을 직접 그 객체의 행동을 관리하는 객체.
Mockito: Mock 객체를 쉽게 만들고 관리하고 검증할 수 있는 방법을 제공한다. 테스트를 작성하는 자바 개발자 50%+ 사용하는 Mock 프레임워크.
단위 테스트에 고찰
Mock Object를 만들어 주입시켜주는 방법을 지원해주는 라이브러리이다.
Mockito는 과거에는 static메서드를 지원하지 않는 단점이 있어 PowerMock을 대안으로 사용했으나 Mockito 3.4.0부터는 static method도 지원한다.
Mockito 시작하기
라이브러리 :
- org.mockto:mockto-core
- org.mokito:mockto-junit-jupiter
다음 세 가지만 알면 Mock을 활용한 테스트를 쉽게 작성할 수 있다.
- Mock을
만드는
방법 - Mock이 어떻게
동작
해야 하는지 관리하는 방법 - Mock의 행동을
검증
하는 방법
Mockito 레퍼런스
Mockito사용법
Mock 객체 만들기
Mockito에서 Mock object에 의존성을 주입하기 위해서는 크게 3가지의 어노테이션을 사용.
@Mock
: Mock 객체를 만들어 반환해주는 어노테이션- Mockto.mock() 메서드로도 생성이 가능하다.
@Spy
: Stub하지 않은 메소드들을 원본 메소드 그대로 사용하는 어노테이션@InjectMocks
: @Mock 또는 @Spy로 생성된 가짜 객체를 자동으로 주입시켜주는 어노테이션
mock을 쓰기에 아주 적절한 경우
- 구현체는 없지만 interface만 알고있어서 interface를 이용해서 코드를 작성하는 경우.
@Mock
을 사용하지 않고mock()
메서드를 통해서도 mock객체를 만들 수 있다.
example)Hint hint = mock(Hint.class);
구현체는 없고 구현하지 않아도 가짜로 객체를 만드는법 2가지
- Mocito.mock() 메서드로 객체 생성
- @Mock 어노테이션으로 객체 생성
1. Mockito.mock()
메서드로 mock 객체를 만드는법
MemberService memberService = Mockito.mock(MemberService.class);
StudyRepository studyRepository = Mockito.mock(StudyRepository.class);
- MemberSerivce와 StudyRepository는
구현체가 없는 interface
이다. - 구현체가 없고 구현하지 않았음에도 불구하고 mock으로 만들어준다.
2. @Mock 어노테이션으로 만드는 방법
- 반드시 @ExtendWith 어노테이션이 있어야 작동!
- JUnit 5 extension으로 MockitoExtension을 사용해야 한다.( 클래스 선언 위에)
- 필드와 메서드 매개변수로 만들 수 있다
- 필드로 만들기
@ExtendWith(MockitoExtension.class)
class StudyServiceTest {
@Mock MemberService memberService;
@Mock StudyRepository studyRepository;
...
}
- 메서드 매개변수로 만들기
@ExtendWith(MockitoExtension.class)
class StudyServiceTest {
@Test
void createStudyService(@Mock MemberService memberService,
@Mock StudyRepository studyRepository) {
StudyService studyService = new StudyService(memberService, studyRepository);
assertNotNull(studyService);
}
}
참고
- 인프런 백기선님 강의 더 자바, 애플리케이션을 테스트하는 다양한 방법
- https://velog.io/@seongwon97/Unit-Test-%EB%8B%A8%EC%9C%84-%ED%85%8C%EC%8A%A4%ED%8A%B8
'테스트 > JUnit' 카테고리의 다른 글
Spring Boot JPA Test @DataJpaTest 기본 설정 (3) | 2022.08.27 |
---|---|
JUnit5 - Java에서의 단위테스트5 Mock, Mockito, Stup (0) | 2022.08.21 |
JUnit5 - Java에서의 단위테스트3 - 테스트 인스턴스들 (0) | 2022.08.21 |
JUnit5 - Java에서의 단위테스트2 - 테스트 반복 (0) | 2022.08.21 |
JUnit5 - Java에서의 단위테스트 1 (0) | 2022.08.21 |