Mockito란?
Mockito는 Java에서 단위 테스트를 위해 가장 널리 사용되는 모킹(Mocking) 프레임워크임.
• Mock 객체를 만들어 테스트 대상 클래스의 의존성을 가짜로 대체하고, 동작을 설정하거나 검증할 수 있도록 지원함.
• 실제 객체를 생성하지 않아도, 특정 메서드 호출 결과를 제어할 수 있음.
Mockito가 필요한 이유
1. 의존성 격리
• 테스트 대상 클래스가 다른 클래스나 외부 리소스(데이터베이스, 네트워크 등)에 의존할 때, 이를 격리하여 단위 테스트를 쉽게 수행할 수 있음.
2. 예상된 결과 확인
• 의존 객체의 메서드 호출 결과를 설정해, 테스트 대상 클래스가 올바르게 동작하는지 검증 가능함.
3. 테스트 속도 향상
• 실제 객체를 사용하는 대신 가짜 객체를 사용하므로, 테스트 속도가 빨라짐.
주요 기능
1. Mock 생성
• 실제 객체를 대체하는 Mock 객체를 생성함.
2. Stub 설정
• 특정 메서드가 호출되었을 때, 원하는 결과를 반환하거나 특정 동작을 수행하도록 설정할 수 있음.
3. 메서드 호출 검증
• Mock 객체의 메서드가 호출되었는지, 호출 횟수는 적절한지 등을 검증함.
Mockito 기본 사용법
1. Mock 객체 생성
import static org.mockito.Mockito.*;
import org.mockito.Mockito;
// Mock 객체 생성
MyService mockService = mock(MyService.class);
2. Stub 설정
• 메서드가 호출되었을 때 반환값을 설정함.
// 특정 메서드 호출 시 반환값 설정
when(mockService.getData()).thenReturn("Mocked Data");
3. 메서드 호출 검증
• Mock 객체의 메서드가 호출되었는지 확인함.
// 메서드 호출 검증
verify(mockService).getData();
실제 예제
Service와 Repository 테스트
// Service 클래스
public class MyService {
private MyRepository repository;
public MyService(MyRepository repository) {
this.repository = repository;
}
public String fetchData() {
return repository.getData();
}
}
// Repository 인터페이스
public interface MyRepository {
String getData();
}
테스트 코드
import static org.mockito.Mockito.*;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
public class MyServiceTest {
@Test
void fetchData_shouldReturnMockedData() {
// Mock 객체 생성
MyRepository mockRepository = mock(MyRepository.class);
// Stub 설정
when(mockRepository.getData()).thenReturn("Mocked Data");
// Service 객체에 Mock 주입
MyService myService = new MyService(mockRepository);
// 테스트 실행 및 검증
String result = myService.fetchData();
assertEquals("Mocked Data", result);
// 메서드 호출 검증
verify(mockRepository).getData();
}
}
Mockito 주요 메서드
1. mock()
• Mock 객체를 생성함.
MyClass mockObject = mock(MyClass.class);
2. when()
• 특정 메서드 호출 시 동작을 설정함.
when(mockObject.method()).thenReturn(value);
3. verify()
• Mock 객체의 메서드 호출 여부를 검증함.
verify(mockObject).method();
4. doReturn(), doThrow()
• 예외를 던지거나 값을 반환하도록 설정함.
doThrow(new RuntimeException()).when(mockObject).method();
5. any()
• 임의의 매개변수를 허용함.
when(mockObject.method(any(String.class))).thenReturn(value);
Mockito의 장점
1. 의존성을 쉽게 Mock으로 대체할 수 있음.
2. 코드 테스트에 필요한 동작을 간단히 설정할 수 있음.
3. 테스트 속도가 빠르고, 복잡한 의존성을 격리 가능함.
출처 : ChatGPT
'BE > Java' 카테고리의 다른 글
[Java] 롬복과 어노테이션 프로세서 (1) | 2025.03.08 |
---|---|
[Java] Java Collections Framework (0) | 2025.03.06 |
[Java] Servlet (2) | 2025.01.10 |
[Java] HttpServletRequest (0) | 2025.01.08 |
[Java] Jackson 라이브러리 (0) | 2025.01.07 |