[Spring Boot] Test Code

Juhye Pyoun·2023년 9월 19일

Spring

목록 보기
4/7

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

  1. 빠른 피드백
    테스트 코드가 없다면
    코드 수정 -> 프로그램 실행 -> API테스트 도구로 HTTP 요청 -> 출력 후 검증 -> 다시 코드 수정
    이 과정을 반복해서 거쳐야한다.
    테스트 코드를 작성하면 코드 수정 후 간단하게 테스트 코드만 실행하면 되기 때문에 서버를 켰다 껐다 할 필요 없이 빠른 피드백을 받을 수 있다.

  2. 눈으로 검증해야 하는 문제
    테스트 코드를 작성하면 직접 print문을 작성하여 눈으로 확인해야 하는 것들을 자동으로 검증해준다.

  3. 기능을 안전하게 보호
    서비스에 기능이 추가될 때, 기존 기능이 잘 작동하는 것을 보장해준다.
    즉, 기능을 추가한 뒤 기존 기능이 잘 작동되는지 확인할 수 있다.

 

테스트 코드 예제

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 home = "home";

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

 

@RunWith(SpringRunner.class)
테스트를 진행할 때 JUnit에 내장된 실행자 외에 다른 실행자를 실행시킨다.
스프링 부트 테스트와 JUnit 사이의 연결자 역할이라고 생각하면 된다.

@WebMvcTest
컨트롤러만 사용할 때 선언이 가능하다.
Spring MVC에 집중할 수 있는 어노테이션이다.

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

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

mvc.perform(get("/home"))
/home 주소로 HTTP GET 요청을 한다.

.andExpect(status().isOk())
결과를 검증하는 andExpect로, 여러개를 붙여서 사용이 가능하다.
status()는 HTTP Header를 검증하는 것으로 결과에 대한 HTTP Status 상태를 확인할 수 있다.
isOK()는 200 코드가 맞는지 확인하고 있다.

.andExpect(content().string(home))
응답한 내용이 home의 값과 같은지 확인한다.

 

[참고자료]

링크1🔗
링크2🔗

0개의 댓글