programing

Spring MVC 컨트롤러 테스트-결과 JSON 문자열 인쇄

procenter 2021. 1. 16. 10:42
반응형

Spring MVC 컨트롤러 테스트-결과 JSON 문자열 인쇄


안녕하세요 저는 Spring mvc 컨트롤러가 있습니다.

@RequestMapping(value = "/jobsdetails/{userId}", method = RequestMethod.GET)
@ResponseBody
public List<Jobs> jobsDetails(@PathVariable Integer userId,HttpServletResponse response) throws IOException {
    try {       
        Map<String, Object> queryParams=new LinkedHashMap<String, Object>(); 

        queryParams.put("userId", userId);

        jobs=jobsService.findByNamedQuery("findJobsByUserId", queryParams);

    } catch(Exception e) {
        logger.debug(e.getMessage());
        response.sendError(HttpServletResponse.SC_BAD_REQUEST);
    }
    return jobs;
}

이것을 실행할 때 JSON 문자열이 어떻게 보이는지보고 싶습니다. 이 테스트 케이스를 작성했습니다

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration("classpath:webapptest")
@ContextConfiguration(locations = {"classpath:test-applicationcontext.xml"})
public class FindJobsControllerTest {
private MockMvc springMvc;

    @Autowired
    WebApplicationContext wContext;

    @Before
    public void init() throws Exception {
        springMvc = MockMvcBuilders.webAppContextSetup(wContext).build();
    }

    @Test
    public void documentsPollingTest() throws Exception {
        ResultActions resultActions = springMvc.perform(MockMvcRequestBuilders.get("/jobsdetails/2").accept(MediaType.APPLICATION_JSON));

        System.out.println(/* Print the JSON String */); //How ?
    }
}

JSON 문자열을 얻는 방법?

Spring 3, codehause Jackson 1.8.4를 사용하고 있습니다.


이 코드를 시도하십시오.

resultActions.andDo(MockMvcResultHandlers.print());

트릭은 andReturn()

MvcResult result = springMvc.perform(MockMvcRequestBuilders
         .get("/jobsdetails/2").accept(MediaType.APPLICATION_JSON)).andReturn();

String content = result.getResponse().getContentAsString();

나를 위해 아래 코드를 사용할 때 작동했습니다.

ResultActions result =
     this.mockMvc.perform(post(resource).sessionAttr(Constants.SESSION_USER, user).param("parameter", "parameterValue"))
        .andExpect(status().isOk());
String content = result.andReturn().getResponse().getContentAsString();

그리고 그것은 작동했습니다! :디

내 대답으로 다른 사람을 도울 수 있기를 바랍니다.


MockMvc인스턴스를 설정할 때 각 테스트 방법의 인쇄 응답을 활성화 할 수 있습니다 .

springMvc = MockMvcBuilders.webAppContextSetup(wContext)
               .alwaysDo(MockMvcResultHandlers.print())
               .build();

.alwaysDo(MockMvcResultHandlers.print())위 코드 일부를 확인하십시오. 이렇게하면 각 테스트 메서드에 대해 인쇄 처리기를 적용하지 않아도됩니다.


If you are testing the Controller, you won't get the JSon result, which is returned by the view. Whether you can test the view (or test the controller and then the view), or starting a servlet contrainer (with Cargo for example), and test at HTTP level, which is a good way to check what really happen.

ReferenceURL : https://stackoverflow.com/questions/21495296/spring-mvc-controller-test-print-the-result-json-string

반응형