SeouliteLab

[Java/자바] Mockito의 @Mock 애노테이션 본문

프로그래밍

[Java/자바] Mockito의 @Mock 애노테이션

Seoulite Lab 2024. 3. 20. 08:47

Mockito의 `@Mock` 애노테이션은 단위 테스트에서 가짜 객체(Mock 객체)를 생성할 때 사용됩니다. 이를 통해 외부 의존성을 가짜 객체로 대체하여 테스트의 격리성을 확보하고, 테스트를 더욱 간편하게 작성할 수 있습니다.

설정 및 예제 코드

Mockito를 사용하기 위해서는 먼저 Maven 또는 Gradle과 같은 의존성 관리 도구를 통해 Mockito 라이브러리를 프로젝트에 추가해야 합니다. 아래는 Maven을 사용하는 경우의 의존성 설정 예시입니다.

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <version>3.9.0</version>
    <scope>test</scope>
</dependency>

이제 @Mock 애노테이션을 사용하여 테스트 클래스에서 Mock 객체를 생성할 수 있습니다. 아래 예제에서는 UserService 클래스를 테스트하며, UserService가 의존하는 UserRepository를 Mock 객체로 대체합니다.

import org.mockito.Mock;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.mockito.Mockito.when;

public class UserServiceTest {

    @Mock
    private UserRepository mockUserRepository;

    private UserService userService;

    @BeforeEach
    public void setUp() {
        mockUserRepository = Mockito.mock(UserRepository.class);
        userService = new UserService(mockUserRepository);
    }

    @Test
    public void testGetUserById() {
        // Mock 객체의 동작 정의
        when(mockUserRepository.findById(1L)).thenReturn(new User(1L, "John Doe"));

        // 테스트 수행
        User user = userService.getUserById(1L);

        // 검증
        assertNotNull(user);
        assertEquals("John Doe", user.getName());
    }
}

출력 결과

// Mock 객체의 findById 메서드 호출에 대한 동작 정의
when(mockUserRepository.findById(1L)).thenReturn(new User(1L, "John Doe"));

// 테스트 수행
User user = userService.getUserById(1L);

// 검증
assertNotNull(user);
assertEquals("John Doe", user.getName());