Подтвердить что ты не робот

Spring Тест контроллера MVC - распечатать результат JSON String

Привет, у меня есть контроллер 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

4b9b3361

Ответ 1

Попробуйте этот код:

resultActions.andDo(MockMvcResultHandlers.print());

Ответ 2

Трюк заключается в использовании andReturn()

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

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

Ответ 3

Для меня это сработало, когда я использовал следующий код:

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

Надеюсь, я смогу помочь другому с моим ответом

Ответ 4

Вы можете включить ответ печати каждого метода тестирования при настройке экземпляра MockMvc.

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

Обратите внимание на часть .alwaysDo(MockMvcResultHandlers.print()) вышеуказанного кода. Таким образом, вы можете избежать применения обработчика печати для каждого метода тестирования.

Ответ 5

Если вы тестируете контроллер, вы не получите результат JSon, который возвращается представлением. Если вы можете протестировать представление (или проверить контроллер, а затем представление) или запустить сервлет-фильтр (например, с Cargo) и протестировать на уровне HTTP, что является хорошим способом проверить, что действительно происходит.