정의
- Mockito는 자바 애플리케이션의 효과적인 단위 테스트에 사용되는 자바 기반 라이브러리인 Mock 프레임워크로써 인터페이스를 Mocking하는 데 사용되므로 단위 테스트에 사용할 수있는 Mock 인터페이스에 더미 기능을 추가 할 수 있음
목표 및 구성요소
- 테스트 더블은 테스트 되는 다른 개체로 전달될 수 있음
- 테스트를 통해 테스트 중에 클래스가 올바르게 반응하는지 확인할 수 있음
-> 예를 들어, Mock 개체의 특정 메서드가 호출되었는지 확인할 수 있음
- 테스트를 실행하는 동안 클래스만 테스트하고 테스트가 부작용에 영향을 받지 않음
더미 객체(Dummy Object)
- 테스트할 때 객체만 필요하고 해당 객체의 기능까지는 필요하지 않은 경우에 사용한다. 더미 객체의 메서드가 호출되는 경우에는 정상 동작을 실행하지 않고 예외가 발생한다.
테스트 스텁(Test Stub)
- 더미 객체에 단순한 기능을 추가한다. 객체의 특정 상태를 가정해서 작성하며 특정한 값을 반환하거나 특정한 메시지를 출력하게 한다.
테스트 스파이(Test Spy)
- 주로 테스트 대상 클래스가 의존하는 클래스로의 출력을 검증하는 데 사용한다. 대상 클래스가 실행되는 동안 특정 의존 클래스로의 호출(또는 호출 결과)을 잡아내며 대상 클래스의 실행이 끝난 후에는 원하는 대로 호출되었는지 검사한다.
가짜 객체(Fake Object)**
- 실제 의존 클래스이 기능을 대체해야 할 경우에 사용하며 실제 의존 클래스의 기능 중 전체나 일부를 훨씬 단순하게 구현한다. 실제 의존 클래스가 구현되지 않았거나, 너무 느리거나, 테스트 환경에서는 사용할 수 없을 때 가짜 객체를 사용한다.
목 객체(Mock Object)
- 미리 정의한 기대 값과 실체 호출을 단언문으로 비교해 문제가 있으며 테스트 메서드를 대신해 모의 객체가 테스트를 실패하게 한다. 목 객체는 테스트 더블의 모든 형태들을 포함하는 의미로 사용되기도 한다.
Mockito의 장점
- Mock 객체를 직접 작성할 필요가 없음
- 안전한 리팩토링(인터페이스 메소드 이름을 바꾸거나 매개 변수를 재 정렬하면 런타임에 Mocks가 생성 될 때 테스트 코드가 중단되지 않음)
- 예외 지원
- 반환 값 지원
- 애노테이션을 통한 Mock 객체 생성 지원
Mockito를 이용한 모의 객체 생성
Mockito Maven Dependency
<!-- https://mvnrepository.com/artifact/org.mockito/mockito-core -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>2.23.4</version>
<scope>test</scope>
</dependency>
Reference
- tutorialspoint, "Mockito - Overview", https://www.tutorialspoint.com/mockito/mockito_overview.htm(2020.07.26)
- onlyfullstack, "PART 1 - WHAT IS MOCK OBJECT? WHAT IS MOCKITO?", https://onlyfullstack.blogspot.com/2019/02/what-is-mockito.html(2020.07.26)
- vogella, "Unit tests with Mockito - Tutorial", https://www.vogella.com/tutorials/Mockito/article.html#using-mockito-for-mocking-objects(2020.07.26)
- 정인상, 채흥석, 『JAVA 객체 지향 디자인 패턴』, 한빛미디어(2019.3.8), 114~115p