Spring MVC控制器测试-打印结果JSON字符串

ivqmmu1c  于 2022-11-14  发布在  Spring
关注(0)|答案(6)|浏览(160)

你好,我有一个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,代码为Jackson1.8.4

nukf8bse

nukf8bse1#

请尝试以下代码:

resultActions.andDo(MockMvcResultHandlers.print());
x6h2sr28

x6h2sr282#

诀窍是使用andReturn()

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

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

m3eecexj3#

在设置MockMvc示例时,可以启用打印每个测试方法的响应。

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

注意上面代码的.alwaysDo(MockMvcResultHandlers.print())部分,这样你就可以避免为每个测试方法应用打印处理程序。

rggaifut

rggaifut4#

对我来说,当我使用下面的代码时,它工作了:

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
希望我的回答能帮助对方

hzbexzde

hzbexzde5#

如果你正在测试控制器,你将不会得到JSon结果,它是由视图返回的。无论你是否可以测试视图(或者测试控制器,然后测试视图),或者启动一个servlet约束器(例如Cargo),并在HTTP级别测试,这是一个很好的方法来检查到底发生了什么。

yx2lnoni

yx2lnoni6#

对于 使用 Spring Boot 的 现代 项目 , 其中 MockMvc 已经 为 您 预先 配置 了 一 个 @WebMvcTest " 切片 " 测试 注解 , 对 这个 问题 最 简单 的 答案 是 显 式 地 将 @AutoConfigureMockMvcprintOnlyOnFailure = false 一起 添加 :

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

中 的 每 一 个

相关问题