Mockito
Mockito는 Java 기반의 모킹(Mock) 프레임워크로, 단위 테스트(Unit Test)에서 의존성 있는 객체를 가짜(Mock) 객체로 대체하여 독립적인 테스트를 수행할 수 있도록 돕는 도구다.
Mockito를 사용하면 실제 객체를 생성하지 않고도 메서드 호출 결과를 시뮬레이션할 수 있으며, Spring Boot, JUnit과 함께 많이 사용된다.
주요 특징
- Mock 객체 생성: 실제 객체 없이 가짜(Mock) 객체를 사용하여 독립적인 테스트 가능.
- 메서드 호출 시 원하는 값 반환 지정: 특정 메서드가 호출될 때 원하는 값을 리턴하도록 설정 가능 (when().thenReturn()).
- 메서드 실행 검증: 특정 메서드가 몇 번 호출되었는지 검증 가능 (verify()).
- Exception 모킹 지원: 예외 발생을 시뮬레이션하여 예외 처리 테스트 가능 (thenThrow()).
- Spy 객체 지원: 실제 객체를 감싸서 일부 동작만 모킹 가능 (spy()).
- Spring Boot & JUnit과의 통합: Spring Boot 테스트 환경에서 강력한 통합 테스트 지원.
장점
- 의존성을 제거한 독립적 단위 테스트 가능: DB, 네트워크 같은 외부 요소 없이 순수 로직만 테스트.
- 빠른 테스트 실행: 실제 객체를 생성하지 않으므로 테스트 속도가 빠름.
- 코드 가독성 향상: 가독성 높은 API 제공 (when(), thenReturn(), verify() 등).
- 유연한 예외 처리 테스트 가능: 예외 발생을 쉽게 시뮬레이션하여 예외 핸들링 검증 가능.
- Spring Boot와 자연스러운 통합: Spring Boot + JUnit 환경에서 Mock 객체를 쉽게 주입하여 테스트 가능.
관련 용어
- Mock 객체: 실제 객체를 대신하는 테스트 전용 가짜 객체.
- Stub: 특정한 입력값에 대해 고정된 값을 반환하는 간단한 테스트용 객체.
- Spy 객체: 일부는 실제 객체처럼 동작하고, 일부만 모킹할 수 있는 객체.
- JUnit: Java의 대표적인 테스트 프레임워크.
- Spring Boot Test: Spring Boot에서 제공하는 테스트 지원 기능.
- BDDMockito: given().willReturn() 스타일의 BDD(행위 주도 개발) 지원 기능.
주요 솔루션 및 사용 사례
- 주요 솔루션
- Mockito Core, Mockito JUnit, Spring Boot + Mockito, Mockito-Kotlin
- 사용 사례
- Spring Boot 서비스 계층 테스트: 데이터베이스와의 의존성을 제거하고 Service 로직만 단독 테스트.
- Controller 테스트: API 요청을 모킹하여 컨트롤러의 응답 값을 검증.
- Exception 핸들링 테스트: 특정 상황에서 예외 발생 여부를 검증 (thenThrow()).
- 외부 API 연동 테스트: 실제 API 호출 없이 모킹하여 테스트 진행.
- Repository 없이 비즈니스 로직 검증: JPA, MongoDB 같은 저장소 없이 핵심 로직만 단독 테스트.