[Spring Boot] JUnit과 Mockito를 이용한 효율적인 테스트 전략

KUKJIN LEE's profile picture

KUKJIN LEE1주 전 작성

Spring Boot 애플리케이션을 개발할 때, 코드의 안정성과 품질을 유지하기 위해 단위 테스트는 필수적인 과정입니다. 특히, JUnit과 Mockito를 활용하면 테스트를 보다 효율적으로 작성할 수 있습니다.

 

단위 테스트란 무엇인가?

단위 테스트는 애플리케이션의 가장 작은 단위, 즉 클래스나 메서드 단위로 동작을 확인하는 테스트입니다. 이를 통해 코드의 예상 동작을 검증하고, 작은 부분에서 발생할 수 있는 오류를 빠르게 찾아낼 수 있습니다. Spring Boot에서는 JUnit과 Mockito를 이용해 테스트를 쉽게 작성하고 유지할 수 있습니다.

 

JUnit을 이용한 테스트 작성

JUnit은 Java의 대표적인 테스트 프레임워크로, 간단한 어노테이션과 메서드 구성을 통해 테스트를 작성할 수 있습니다. Spring Boot에서는 @Test 어노테이션을 사용하여 간단하게 테스트 케이스를 정의할 수 있습니다.

import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;

public class CalculatorTest {
    @Test
    public void testAddition() {
        Calculator calculator = new Calculator();
        int result = calculator.add(2, 3);
        assertEquals(5, result);
    }
}

assertEquals()를 이용해 덧셈 메서드의 결과가 기대값과 일치하는지 검증합니다.

 

Mockito를 이용한 의존성 주입 모의(Mock)하기

Mockito는 의존성 주입을 모의 객체로 대체하여 테스트를 더 쉽게 작성할 수 있게 해주는 프레임워크입니다. 이를 통해, 데이터베이스 연결이나 외부 서비스 호출 없이도 테스트가 가능해집니다. 예를 들어, 서비스 레이어의 메서드를 테스트할 때 레포지토리 의존성을 모의 객체로 대체할 수 있습니다.

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

public class UserServiceTest {
    @Test
    public void testFindUser() {
        UserRepository userRepository = mock(UserRepository.class);
        UserService userService = new UserService(userRepository);
        User mockUser = new User("john", "doe");

        when(userRepository.findByUsername("john")).thenReturn(mockUser);

        User user = userService.findUser("john");
        assertEquals("john", user.getFirstName());
    }
}

Mockito를 활용하면 데이터베이스와 같은 복잡한 의존성을 제거하고 서비스의 비즈니스 로직을 간편하게 테스트할 수 있습니다.

 

단위 테스트 작성 시 고려사항

  • 테스트 독립성: 각각의 테스트는 독립적으로 실행되어야 하며, 다른 테스트의 결과에 영향을 받지 않아야 합니다.

  • 단순성 유지: 단위 테스트는 간단하고 명확해야 하며, 가능한 한 적은 수의 조건을 테스트해야 합니다.

  • 빠른 실행: 단위 테스트는 빨리 실행되어야 하며, 이를 통해 개발자는 자주 테스트를 실행하며 코드를 수정할 수 있습니다.

 

프로젝트 폴더 구조에서 테스트 코드 위치

Spring Boot 프로젝트에서 테스트 코드는 일반적으로 src/test/java 디렉토리에 위치합니다. 이 디렉토리 구조는 src/main/java에 있는 실제 소스 코드와 동일한 패키지 구조를 따르는 것이 좋습니다. 예를 들어, com.example.service.UserService 클래스에 대한 테스트 코드는 src/test/java/com/example/service/UserServiceTest에 위치시킵니다. 이를 통해 테스트 대상 클래스와 테스트 클래스 간의 관계를 명확히 하고 유지보수를 용이하게 할 수 있습니다.

 

JUnit과 Mockito를 사용한 단위 테스트는 코드 품질을 높이고 유지보수성을 향상시키는 중요한 도구입니다. Spring Boot 애플리케이션을 개발할 때 이러한 테스트를 잘 활용하면 예상치 못한 오류를 미연에 방지하고, 안정적인 코드를 유지하는 데 큰 도움이 됩니다.

New Tech Posts