TDD : Test Driven Development. 즉, 테스트가 주도하는 개발이다. 테스트 코드를 먼저 작성하는 것부터 시작한다.
단위 테스트(Unit Test) : TDD의 첫 단계인 '기능 단위의 테스트 코드를 작성하는 것'을 말한다.
단위 테스트 코드를 작성함으로써 얻는 이점 -> 반드시 익혀야할 기술이자 습관이다.
- 초기에 문제를 발견하게 도와준다.
- 코드를 리팩토링, 라이브러리 업그레이드를 할 경우, 기존 기능이 올바르게 작동하는지 확인할 수 있다.
- 코드작성 > Tomcat 실행 > Postman으로 HTTP요청 > 요청결과를 print하여 검증 하는 원시적 과정을 줄일 수 있다.
- 자동 검증이 가능하다.
테스트 코드 작성을 도와주는 프레임워크들 (xUnit)
JUnit - Java
DBUnit - DB
CppUnit - C++
NUnit - .net
// @RestController
// 컨트롤러를 JSON 을 반환하는 컨트롤러로 만들어준다.
@RestController
public class HelloController {
// @GetMapping
// HTTP Get Method 의 요청을 받을 수 있는 API를 만들어준다.
@GetMapping("/hello")
public String hello() {
return "hello";
}
}
// @RunWith(SpringRunner.class)
// 테스트 진행시 JUnit에 내장된 실행자 외에 다른 실행자를 실행시킨다 (여기선 SpringRunner라는 스프링 실행자를 실행시킴)
// 다시말해, 스프링 부트 테스트와 JUnit 사이의 연결자 역할을 한다.
@RunWith(SpringRunner.class)
// @WebMvcTest
// 여러가지의 스프링 테스트 어노테이션 중에서 Web(Spring Mvc)에 집중할 수 있는 어노테이션이다.
// @Controller,@ControllerAdvice를 사용할 수 있다.
@WebMvcTest(controllers = HelloController.class)
public class HelloControllerTest {
// @Autowired
// 스프링이 관리하는 Bean을 주입 받는 역할을 한다.
// private MockMvc mvc
// 웹 API를 테스트할 경우에에 사용한. HTTP GET,POST 등에 대한 테스트가 능가
@Autowired
private MockMvc mvc;
@Test
public void hello가_리턴된다() throws Exception {
String hello = "hello";
// mvc.perform(get("/hello"))
// '/hello' 주소로 GET 요청을 한다
// andExpect(status().isOk())
// mvc.perform의 결과를 검증한다. OK(200)인지 검증
// .andExpect(content().string(hello));
// 응답 본문의 내용을 검증한다.
mvc.perform(get("/hello"))
.andExpect(status().isOk())
.andExpect(content().string(hello));
}
}