Spring Boot 단위 테스트와 통합 테스트

Yeeun_Kim·2025년 3월 31일
0
post-thumbnail

서론

Spring Boot 애플리케이션에서 안정적인 코드 작성을 위해서는 테스트가 필수입니다. 이 글에서는 Spring Boot의 단위 테스트와 통합 테스트에 대해 알아보고, 각각의 테스트가 무엇인지, 어떻게 작성하는지에 대해 자세히 살펴보겠습니다.

단위 테스트(Unit Test)란?

  • 단위 테스트는 애플리케이션의 개별적인 단위를 테스트하는 방법입니다. 주로 비즈니스 로직이나 서비스 계층에 대해 테스트를 진행합니다.
  • Spring Boot에서 단위 테스트를 작성할 때는 @WebMvcTest, @MockBean, @DataJpaTest 등을 활용합니다.

서비스 계층 단위 테스트

@RunWith(SpringRunner.class)
@SpringBootTest
public class MyServiceTest {

    @Autowired
    private MyService myService;

    @MockBean
    private MyRepository myRepository;

    @Test
    public void testServiceMethod() {
        // 테스트할 데이터 준비
        MyEntity entity = new MyEntity(1L, "test name");
        Mockito.when(myRepository.findById(1L)).thenReturn(Optional.of(entity));

        // 테스트 실행
        MyEntity result = myService.findById(1L);

        // 검증
        assertEquals("test name", result.getName());
    }
}
  • @MockBean : Spring Context에 존재하는 빈을 모킹(mocking)하여 의존성 주입.
  • @Autowired: 실제 서비스 빈을 주입받아 테스트.

통합 테스트(Integration Test)란?

  • 통합 테스트는 애플리케이션의 여러 계층이나 구성 요소가 제대로 상호작용하는지를 확인하는 테스트입니다.
  • Spring Boot에서 통합 테스트는 @SpringBootTest를 활용하여 실제 애플리케이션 컨텍스트를 로드하여 테스트할 수 있습니다.

REST API를 테스트하는 통합 테스트 예시

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureMockMvc
public class MyControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void testGetRequest() throws Exception {
        mockMvc.perform(get("/api/myendpoint"))
            .andExpect(status().isOk())
            .andExpect(jsonPath("$.name").value("test name"));
    }
}
  • @SpringBootTest: 애플리케이션 컨텍스트를 로드하여 통합 테스트.
  • @AutoConfigureMockMvc: 실제 HTTP 요청을 보내지 않고, MockMvc를 사용하여 API 테스트.
  • @WebEnvironment.RANDOM_PORT: 테스트 시 임의의 포트를 사용하여 실제 서버와 비슷한 환경에서 테스트.

단위 테스트와 통합 테스트의 차이점

단위 테스트

  • 빠르고 효율적입니다.
  • 작은 단위의 코드만 테스트하고, 외부 의존성은 모킹(mocking)합니다.

통합 테스트

  • 여러 계층의 상호작용을 테스트합니다.
  • 실제 애플리케이션 환경을 로드하므로 실행 속도가 느릴 수 있습니다.

결론

단위 테스트와 통합 테스트는 각기 다른 목적과 특징을 가지고 있으며, 서로 보완적인 관계입니다. 단위 테스트는 빠르게 비즈니스 로직을 검증하는 데 유용하고, 통합 테스트는 시스템 간의 상호작용을 확인하는 데 유용합니다.

0개의 댓글