1. Mockito란?
- Mockito는 Java 진영에서 가장 인기 있는 mocking 프레임워크입니다.
- 단위 테스트를 작성할 때 테스트 대상 코드가 의존하는 객체들을 가짜(mock)로 대체하여 테스트를 용이하게 만들어줍니다.
- 예를 들어, 데이터베이스나 외부 API에 의존하는 코드를 테스트할 때 실제 데이터베이스나 API 대신 Mockito로 만든 가짜 객체를 사용할 수 있습니다.
1.1 테스트 더블의 종류
- Mockito에서 제공하는 대표적인 테스트 더블은 다음과 같습니다
- Mock: 가짜 객체를 생성하여 그 객체의 모든 행동을 프로그래밍할 수 있습니다.
- Spy: 실제 객체를 감싸서 일부 메서드만 가짜로 대체할 수 있습니다.
- Stub: 미리 준비된 답변으로 메서드 호출에 응답하는 객체입니다.
2. Mockito 5 설정하기
2.1 의존성 추가
최신 Spring Boot 3.x 프로젝트를 사용한다면 별도의 설정 없이 spring-boot-starter-test
에 Mockito가 포함되어 있습니다. 하지만 수동으로 설정해야 하는 경우 다음과 같이 의존성을 추가합니다:
Maven의 경우
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>5.14.2</version>
<scope>test</scope>
</dependency>
Gradle의 경우
testImplementation 'org.mockito:mockito-core:5.14.2'
2.2 JUnit 5와 통합
- Mockito 5는 JUnit 5와 원활하게 통합됩니다.
@ExtendWith(MockitoExtension.class)
를 사용하여 Mockito의 기능을 JUnit 테스트에서 사용할 수 있습니다:
@ExtendWith(MockitoExtension.class)
class UserServiceTest {
// 테스트 코드
}
3. Mock 객체 생성하기
Mock 객체를 생성하는 방법은 크게 두 가지가 있습니다.
3.1 애노테이션을 사용한 방법
@ExtendWith(MockitoExtension.class)
class UserServiceTest {
@Mock
private UserRepository userRepository; // Mock 객체 생성
@InjectMocks
private UserService userService; // Mock을 주입받는 대상
// 테스트 메서드...
}
@Mock
: Mock 객체를 생성합니다.@InjectMocks
:@Mock
으로 생성된 객체를 자동으로 주입받습니다.
3.2 직접 생성하는 방법
UserRepository userRepository = mock(UserRepository.class);
UserService userService = new UserService(userRepository);
- 이 방법은 테스트 메서드 내에서 지역적으로 Mock 객체가 필요할 때 유용합니다.