본문 바로가기

Java, JavaScript/Spring Boot

[Spring Boot] Spring Rest Docs 사용하기 - POST

728x90

GET 방식에 이어 이번에는 POST를 사용한 테스트를 진행해보겠습니다. GET 방식과 마찬가지로 given, when, then 순서로 설명하겠습니다. 먼저 Member POST의 given입니다.

 

//given
Address address = new Address("경기도", "테스트", "544-54");

Map<String, Object> map = new HashMap<>();
map.put("name", "홍길동");
map.put("phone", "010-5424-6542");
map.put("address", address);

 

member 등록을 위해서는 name, phone, address가 필요합니다. 따라서 필요한 데이터의 Key와 Value를 map에 저장해줍니다.

 

//when
ResultActions result = mockMvc.perform(post("/api/v1/member/")
        .contentType(MediaType.APPLICATION_JSON)
        .characterEncoding("UTF-8")
        .accept(MediaType.APPLICATION_JSON)
        .content(objectMapper.writeValueAsString(map)));

 

perform을 사용하여 테스트를 진행할 uri를 설정합니다. given에서 저장한 데이터는 objectMapper를 사용하여 데이터가 json 형태로 변경되어 전달될 수 있도록 해줍니다. 

 

//then
result.andExpect(status().isOk())
        .andExpect(jsonPath("$.name").value(member.getName()))
        .andDo(document("POST-member",
                preprocessRequest(prettyPrint()),
                preprocessResponse(prettyPrint()),
                requestFields(
                        fieldWithPath("name").type(JsonFieldType.STRING).description("멤버의 이름"),
                        fieldWithPath("phone").type(JsonFieldType.STRING).description("멤버의 핸드폰 번호"),
                        fieldWithPath("address.city").type(JsonFieldType.STRING).description("멤버의 도시"),
                        fieldWithPath("address.street").type(JsonFieldType.STRING).description("멤버의 도로명"),
                        fieldWithPath("address.zipcode").type(JsonFieldType.STRING).description("멤버의 zipcode")
                )));

 

먼저 결과로 반환된 json의 name의 값이 member.getName()과 동일한지 판별합니다. name의 값이 동일하다면 document를 사용하여 폴더의 이름, test request 데이터, test response 데이터, request에 넘겨줘야 할 값을 설정해줍니다. 다음은 prettyPrint, requestFields에 대한 설명입니다.

 

  • prettyPrint(): 보기 편하게 json 데이터를 출력해줍니다. 사용하지 않으면 1줄로 json 데이터가 출력됩니다.
  • requestFields(): requset에 사용된 변수의 경로, 타입, 설명에 대해서 설정합니다.

결과로 나온 .adoc 파일을 통해 문서를 생성하면 다음 그림과 같은 결과를 얻을 수 있습니다. (🧨 다음의 결과는 테스트의 일부입니다)

 

POST 문서의 일부

728x90