BE/Java

[Java] Mockito

baek-dev 2025. 1. 21. 18:30

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