순간을 기록으로

[스프링] 테스트 코드로 API 요청과 응답 자동 검증하기 본문

Development/Spring

[스프링] 테스트 코드로 API 요청과 응답 자동 검증하기

luminous13 2022. 9. 8. 01:31

상황

이전 프리 프로젝트에서 API를 검증할 때 포스트맨을 이용하여 수동으로 하나하나 검증을 했다. 

수동으로 검증하려니 시간을 많이 잡아먹고 정확성도 떨어지는 문제점이 있었다.

그래서 이번에는 테스트 코드를 작성하여 API를 자동으로 검증해보자.

 

아래의 예시는 테스트 코드를 작성하여 어떻게 API 테스트를 자동 검증하는지를 보여준다.

 

이번 예시에서는 http://localhost:8080/hello/dto?name=hello&amount=1000으로 GET 요청을 보냈을 때 다음과 같이 JSON으로 응답이 와야 한다.

 

 

HelloResponseDto

import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor
public class HelloResponseDto {

    private final String name;
    private final int amount;
}

 

HelloController

@RestController
public class HelloController {

    @GetMapping("/hello/dto")
    public HelloResponseDto helloResponseDto(@RequestParam String name,
                                             @RequestParam int amount) {
        return new HelloResponseDto(name, amount);
    }
}

 

HelloControllerTest

@WebMvcTest
class HelloControllerTest {

    @Autowired
    private MockMvc mvc;

    @DisplayName("helloDto가 리턴된다")
    @Test
    void helloDto() throws Exception {
        String name = "hello";
        int amount = 1000;
        mvc.perform(
                get("/hello/dto")
                        .param("name", name)
                        .param("amount", String.valueOf(amount))
        )
                .andExpect(status().isOk())
                .andExpect(jsonPath("$.name", is(name)))
                .andExpect(jsonPath("$.amount", is(amount)));
    }
}

 

  • mvc.perfrom(get("/hello/dto")
    • MockMvc를 이용하여 /hello/dto로 GET 요청을 한다
  • param("name", name)과 param("amount", String.valueOf(amount))
    • 쿼리 파라미터(쿼리 스트링, 요청 파라미터)를 Key&value 형태로 설정한다. 데이터를 주고받을 때는 문자열로 주고받으므로 amount는 문자열로 형변환을 한다.
  • andExpect(status().isOk())
    • 요청에 대한 응답을 검증합니다.
    • HTTP 헤더가 200(OK)인지 검증한다.
  • andExpect(jsonPath("$.name", is(name))
    • jsonPath는 응답 값을 필드별로 검증할 수 있는 메서드다.
    • $를 기준으로 필드명을 명시한다

 

테스트 코드를 이용한 API 자동 검증 완료

Comments