빠른 피드백
테스트 코드가 없다면
코드 수정 -> 프로그램 실행 -> API테스트 도구로 HTTP 요청 -> 출력 후 검증 -> 다시 코드 수정
이 과정을 반복해서 거쳐야한다.
테스트 코드를 작성하면 코드 수정 후 간단하게 테스트 코드만 실행하면 되기 때문에 서버를 켰다 껐다 할 필요 없이 빠른 피드백을 받을 수 있다.
눈으로 검증해야 하는 문제
테스트 코드를 작성하면 직접 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 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의 값과 같은지 확인한다.