기존에는 코드 리팩토링 후 서버를 띄우고 HTTP 요청을 직접 보내서 응답을 확인하는 방식으로 기능을 검증함

그러나 이 방법은 잘못된 동작이 발생하더라도 쉽게 놓칠 수 있다는 한계가 있음

이를 해결하기 위해 테스트 코드를 작성하여 웹 응답 검증 테스트를 진행할 수 있음

테스트 코드를 이용한 테스트

목표 : 응답 검증

검증하고자 하는 것은 API 응답이 예상한대로 오는 지 확인하는 것임

웹 응답 3가지

  1. 상태 코드 : HTTP 상태 코드가 우리가 예상한 대로 나오는가?
  2. Content-Type : 응답의 Content-Type이 예상된 형식으로 오는가?
  3. body : 응답 본문에 예상한 내용이 담겨있는가?

개발자 테스트

참고! helloApi() 테스트를 실행시키기 위해서는 HellobootApplication 서버를 실행시켜줘야 됨

public class HelloApiTest {
    @Test
    public void helloApi() throws Exception {
        // http localhost:8080/hello?name=Spring
        TestRestTemplate rest = new TestRestTemplate(); // RestTemplate : api 요청을 호출해서 응답을 가져와서 사용할 수 있음

        ResponseEntity<String> res
                = rest.getForEntity("<http://localhost:8080/hello?name={name}>", String.class, "Spring");

        // 응답 검증
        // status code 200
        assertThat(res.getStatusCode()).isEqualTo(HttpStatus.OK);
        // header(content-type) text/plain
        assertThat(res.getHeaders().getFirst(HttpHeaders.CONTENT_TYPE)).startsWith(MediaType.TEXT_PLAIN_VALUE);
        // body Hello Spring
        assertThat(res.getBody()).isEqualTo("Hello Spring");
    }
}

JUnit5를 이용하여 개발자 테스트를 진행한다면 HTTP 툴을 이용하지 않고 더 정확하게 API 응답을 검증할 수 있음