programing

스프링 MVC 컨트롤러 테스트 - 결과 JSON 문자열을 출력합니다.

closeapi 2023. 4. 6. 21:40
반응형

스프링 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 String이 어떻게 표시되는지 보고 싶습니다.나는 이 시험 케이스를 썼다.

@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 문자열을 얻는 방법

나는 잭슨 1.8.4 코드쉐이즈 Spring 3을 사용하고 있다.

다음 코드를 사용해 보십시오.

resultActions.andDo(MockMvcResultHandlers.print());

요령은 사용법이다.andReturn()

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

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

각 테스트 방법의 인쇄 응답을 유효하게 할 수 있습니다.MockMvc사례.

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

주의:.alwaysDo(MockMvcResultHandlers.print())위 코드의 일부입니다.이렇게 하면 각 테스트 방법에 인쇄 핸들러를 적용하지 않아도 됩니다.

아래 코드를 사용했을 때 동작했습니다.

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

그리고 효과가 있었다!!:d

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

컨트롤러를 테스트하는 경우 보기에 반환되는 JSon 결과를 얻을 수 없습니다.뷰를 테스트할 수 있는지(또는 컨트롤러를 테스트한 후 뷰를 테스트할지), 서블릿컨테이너를 기동할 수 있는지(예를 들어 Cargo를 사용하여), HTTP 레벨로 테스트할 수 있는지 여부입니다.이것은 실제로 무슨 일이 일어나고 있는지를 체크하는 좋은 방법입니다.

Spring Boot을 사용하는 최신 프로젝트의 경우,MockMvc를 사용하여 이미 구성되어 있습니다.@WebMvcTest테스트 주석, 질문에 대한 가장 쉬운 대답은 명시적으로 추가하는 것입니다.@AutoConfigureMockMvc와 함께printOnlyOnFailure = false:

@WebMvcTest(MyController.class)
@AutoConfigureMockMvc(printOnlyOnFailure = false)
class MySlicedControllerTest {
  // ...
}

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

반응형