当前位置: 首页 > 知识库问答 >
问题:

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

南门烈
2023-03-14

嗨,我有一个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

共有3个答案

查飞星
2023-03-14

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

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

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

童宏富
2023-03-14

技巧是使用<code>andReturn()

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

String content = result.getResponse().getContentAsString();
万选
2023-03-14

试试这段代码:

resultActions.andDo(MockMvcResultHandlers.print());
 类似资料:
  • 问题内容: 我试图从我的postgres数据库中检索一些数据,并将它们打印为json。我成功地在没有json的情况下打印了它们,但我在json中需要它们。 main.go: 这是我访问localhost:1337 / db时得到的 这是终端上的输出: 有人知道是什么问题吗? 问题答案: 该包使用反射(结构的包),以存取字段。您需要导出结构的字段以使其起作用(以大写字母开头): 扫描时: 引用自:

  • 我有过 我通过这种方式传递profileJson: 但是我的配置文件Json对象具有所有空字段。我应该怎么做才能让Spring解析我的json?

  • 英文原文:http://emberjs.com/guides/testing/testing-controllers/ 单元测试方案和计算属性与之前单元测试基础中说明的相同,因为Ember.Controller集成自Ember.Object。 针对控制器的单元测试使用ember-qunit框架的moduleFor来做使这一切变得非常简单。 测试控制器操作 下面给出一个PostsController

  • 问题内容: 我一直在寻找其他语言的用法,但发现必须使用特殊字符\b删除最后一个字符。 对于多次调用console.log()的node.js,这不起作用。 如果我写一个日志: 我得到结果:abd 但是如果我写: 我得到结果: abc d 我的目标是打印一条等待消息,例如: 等待 等待。 等待中.. 等待中… 然后再次: 等待 等待。 等等 都在同一行。 问题答案: 有以下功能可用: 可以提供参数

  • spring-test模块对测试控制器@Controller提供了最原生的支持。详见14.6 "Spring MVC测试框架"一节。

  • 问题内容: 函数打印到控制台。我想测试控制台打印。我如何在python中实现呢? 需要测试这个功能,没有返回语句: 我的测试: 问题答案: 您可以通过临时重定向到一个对象来轻松捕获标准输出,如下所示: 该程序的输出为: 说明重定向成功捕获了输出,并且您能够将输出流还原到开始捕获之前的状态。 请注意,上面的代码针对Python 2.7,如问题所示。Python 3稍有不同: