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 파일을 통해 문서를 생성하면 다음 그림과 같은 결과를 얻을 수 있습니다. (🧨 다음의 결과는 테스트의 일부입니다)
728x90
'Java, JavaScript > Spring Boot' 카테고리의 다른 글
[Error] ids for this class must be manually assigned before calling save() (1) | 2021.11.09 |
---|---|
[Spring Boot] Spring Rest Docs 사용하기 - PUT (0) | 2021.09.23 |
[Spring Boot] Spring Rest Docs 사용하기 - GET (0) | 2021.09.13 |
[Spring Boot] POST 요청을 사용하여 Entity 생성하기 (0) | 2021.09.10 |
[Spring Boot] @RequestParam, @PathVariable 차이는 뭐야? (0) | 2021.09.09 |