[SPRING] mockMvc를 사용하여 응답 본문에서 JSON을 확인하는 방법
SPRINGmockMvc를 사용하여 응답 본문에서 JSON을 확인하는 방법
이것은 @Controller에 의해 주석이 달린 컨트롤러 내 메서드입니다.
@RequestMapping(value = "/getServerAlertFilters/{serverName}/", produces = "application/json; charset=utf-8")
@ResponseBody
public JSONObject getServerAlertFilters(@PathVariable String serverName) {
JSONObject json = new JSONObject();
List<FilterVO> filteredAlerts = alertFilterService.getAlertFilters(serverName, "");
JSONArray jsonArray = new JSONArray();
jsonArray.addAll(filteredAlerts);
json.put(SelfServiceConstants.DATA, jsonArray);
return json;
}
내 json으로 { "data": [{ "useRegEx": "false", "hosts": "v2v2v2"}]}를 기대합니다.
그리고 이것은 내 JUnit 테스트입니다.
@Test
public final void testAlertFilterView() {
try {
MvcResult result = this.mockMvc.perform(get("/getServerAlertFilters/v2v2v2/").session(session)
.accept("application/json"))
.andDo(print()).andReturn();
String content = result.getResponse().getContentAsString();
LOG.info(content);
} catch (Exception e) {
e.printStackTrace();
}
}
다음은 콘솔 출력입니다.
MockHttpServletResponse:
Status = 406
Error message = null
Headers = {}
Content type = null
Body =
Forwarded URL = null
Redirected URL = null
Cookies = []
심지어 result.getResponse (). getContentAsString ()은 빈 문자열입니다.
누군가 제 JUnit 테스트 메소드에서 JSON을 얻는 방법을 제안하여 테스트 케이스를 완료 할 수 있습니까?
해결법
-
==============================
1.내 단위 테스트를 위해 TestNG를 사용합니다. 그러나 Spring Test Framework에서는 둘 다 비슷하게 보입니다. 그래서 네 시험이 아래 같아 질거야.
내 단위 테스트를 위해 TestNG를 사용합니다. 그러나 Spring Test Framework에서는 둘 다 비슷하게 보입니다. 그래서 네 시험이 아래 같아 질거야.
@Test public void testAlertFilterView() throws Exception { this.mockMvc.perform(get("/getServerAlertFilters/v2v2v2/"). .andExpect(status().isOk()) .andExpect(content().json("{'data':[{'useRegEx':'false','hosts':'v2v2v2'}]}")); }
json 키와 값을 확인하려면 jsonpath를 사용할 수 있습니다. .andExpect (jsonPath ( "$. yourKeyValue"는 ( "WhatYouExpect"))));
thatcontent () .json ()이 해결되지 않았다는 것을 알 수 있습니다.
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. *;
-
==============================
2.406 Not Acceptable 상태 코드는 Spring이 객체를 json으로 변환 할 수 없다는 것을 의미합니다. 컨트롤러 메소드가 String을 반환하도록 만들고 json.toString ();을 반환 할 수 있습니다. 또는 자신의 HandlerMethodReturnValueHandler를 구성하십시오. 이 유사한 질문을 확인하십시오 SpringMVC에서 @ResponseBody를 사용하여 JsonObject 반환하기
406 Not Acceptable 상태 코드는 Spring이 객체를 json으로 변환 할 수 없다는 것을 의미합니다. 컨트롤러 메소드가 String을 반환하도록 만들고 json.toString ();을 반환 할 수 있습니다. 또는 자신의 HandlerMethodReturnValueHandler를 구성하십시오. 이 유사한 질문을 확인하십시오 SpringMVC에서 @ResponseBody를 사용하여 JsonObject 반환하기
-
==============================
3.get 및 post 메소드에 대해 아래에서 시도 할 수 있습니다.
get 및 post 메소드에 대해 아래에서 시도 할 수 있습니다.
@Autowired private MuffinRepository muffinRepository; @Test public void testgetMethod throws Exception(){ Muffin muffin = new Muffin("Butterscotch"); muffin.setId(1L); BddMockito.given(muffinRepository.findOne(1L)). willReturn(muffin); mockMvc.perform(MockMvcRequestBuilders. get("/muffins/1")). andExpect(MockMvcResutMatchers.status().isOk()). andExpect(MockMvcResutMatchers.content().string("{\"id\":1, "flavor":"Butterscotch"}")); } //Test to do post operation @Test public void testgetMethod throws Exception(){ Muffin muffin = new Muffin("Butterscotch"); muffin.setId(1L); BddMockito.given(muffinRepository.findOne(1L)). willReturn(muffin); mockMvc.perform(MockMvcRequestBuilders. post("/muffins") .content(convertObjectToJsonString(muffin)) .contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION_JSON)) .andExpect(MockMvcResutMatchers.status().isCreated()) .andExpect(MockMvcResutMatchers.content().json(convertObjectToJsonString(muffin))); }
응답이 비어 있으면 리포지토리가 작동하는 Entity에서 equals () 및 hashCode () 메서드를 재정의해야합니다.
//Converts Object to Json String private String convertObjectToJsonString(Muffin muffin) throws JsonProcessingException{ ObjectWriter writer = new ObjectWriter().writer().withDefaultPrettyPrinter(); return writer.writeValueAsString(muffin); }
from https://stackoverflow.com/questions/30482934/how-to-check-json-in-response-body-with-mockmvc by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 관리 속성의 getter를 호출 할 때 NPE (0) | 2019.04.26 |
---|---|
[SPRING] @ Configurable-Beans는 Spring Boot에서 JPA-EntityListeners와 함께 작동하지 않습니다. (0) | 2019.04.26 |
[SPRING] 주석만을 사용하여 Spring AOP로 인터셉트하기 (0) | 2019.04.26 |
[SPRING] URL (Spring, REST, CXF)에서 이스케이프 문자 (파이프 |)를 처리하는 방법? (0) | 2019.04.26 |
[SPRING] 스프링 데이터 JPA + Websphere 8.5.5에서 최대 절전 모드 (0) | 2019.04.26 |