KAKAO.GG
백엔드

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

65870717953200389e7820de
2024. 12. 9.
조회 110
#spring boot junit test, Spring Boot JUnit 단위 테스트, Spring Boot test, 스프링 JUnit 테스트, 스프링 Mockito, 스프링부트 테스트코드 작성법

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 애플리케이션을 개발할 때 이러한 테스트를 잘 활용하면 예상치 못한 오류를 미연에 방지하고, 안정적인 코드를 유지하는 데 큰 도움이 됩니다.