9월 27일 - Test Code 작성의 필요성

Yullgiii·2024년 9월 27일
0
post-thumbnail

[Spring Boot] Test Code 작성의 필요성

테스트 코드를 작성해야 하는 이유

  1. 개발 단계에서 문제를 빠르게 발견할 수 있다.
  2. 코드 리팩토링이나 라이브러리 업그레이드 시 기존 기능이 잘 작동하는지 확인할 수 있다.
  3. 기능에 대한 불확실성을 줄여준다.

많은 사람들이 테스트 코드를 작성하는 일이 개발 시간을 늘린다고 생각할 수 있다. 하지만 코드를 검증할 때 테스트 코드를 작성하지 않고 진행한다면 더 큰 시간 소모가 발생할 것이다.

  • 코드를 작성한 뒤 프로그램을 실행하고 서버를 켠다.
  • API 프로그램(ex. Postman)으로 HTTP 요청 후 결과를 Print로 확인한다.
  • 예상과 다르다면, 프로그램을 종료하고 코드를 수정한 후 이 과정을 반복한다.

이러한 방식이 얼마나 반복될지 알 수 없으며, 하나의 기능마다 이런 테스트를 하는 것은 비효율적이다. 또한, Print로 결과를 확인하는 것도 한계가 있으며, 테스트 코드는 자동으로 검증을 진행해주기 때문에 수동으로 확인할 필요가 없다.

새로운 기능이 추가될 때 테스트 코드를 통해 기존 코드에 미친 영향을 바로 확인하고 수정해야 할 부분을 파악할 수 있는 장점도 있다.

따라서 테스트 코드는 개발 과정에서 필수적이며 반드시 활용해야 한다.

테스트 코드 예제

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;

@RunWith(SpringRunner.class)
@WebMvcTest(controllers = HomeController.class)
public class HomeControllerTest {

    @Autowired
    private MockMvc mvc;

    @Test
    public void home_return() throws Exception {
        // when
        String expectedResponse = "Welcome Home!";

        // then
        mvc.perform(get("/home"))
                .andExpect(status().isOk())
                .andExpect(content().string(expectedResponse));
    }
}

주요 어노테이션 및 클래스 설명

  • @RunWith(SpringRunner.class): JUnit에 내장된 실행자 대신 다른 실행자를 실행시키며, 스프링 부트 테스트와 JUnit 사이의 연결자 역할을 한다.

  • @WebMvcTest: Controller만 테스트할 때 사용하며, Spring MVC에 집중할 수 있게 해준다.

  • @Autowired: 스프링이 관리하는 Bean을 주입시켜준다.

  • MockMvc: 웹 API를 테스트할 때 사용하며, 이를 통해 HTTP GET, POST, DELETE 등에 대한 API 테스트가 가능하다.

  • mvc.perform(get("/home")): "/home" 주소로 HTTP GET 요청을 보내는 상황을 시뮬레이션한다.

  • .andExpect(status().isOk()): 결과를 검증하는 메서드로, 여러 개를 이어서 사용할 수 있다. status()는 HTTP Header를 검증하는 것이며, isOk()는 200 상태 코드를 확인한다.

So...

테스트 코드는 코드를 견고하게 만들고, 리팩토링이나 기능 추가 시 발생할 수 있는 문제를 빠르게 확인할 수 있게 해준다. 프로젝트를 진행하면서 다양한 기능을 테스트 코드로 검증하는 습관을 길러야 견고하고 안정적인 애플리케이션을 만들 수 있다.

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글