如何使用MockMVC检查Spring Unittest中的返回类型?

时间:2016-03-05 13:30:57

标签: spring unit-testing mockmvc

我想测试的Spring方法

SettableMass

我希望确保所有对/ files的调用都使用List [FileListRequest]进行响应。怎么样?
这是测试的方法。

@RequestMapping(value="/files", method=RequestMethod.GET)
@ResponseBody
public List<FileListRequest> get() {
   return getMainController().getAllFiles();
}

我可以简单地替换SOMETHING还是我完全错了?

我可以对perform()返回的对象运行assert方法吗?

2 个答案:

答案 0 :(得分:1)

修改

MvcResult result =   this.mockMvc.perform(get("/files").accept("application/json"))
            .andExpect(status().isOk())
             .andReturn();

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

//使用Gson或Jackson将json String转换为各自的对象

ObjectMapper mapper = new ObjectMapper();
TypeFactory typeFactory=objectMapper.getTypeFactory();
List<SomeClass> someClassList =mapper.readValue(content , typeFactory.constructCollectionType(List.class, SomeClass.class));

//在此处列出您的列表

您可以使用Json Path检查回复中是否存在特定数据

来自旧项目的代码片段

mockMvc.perform(get("/rest/blogs")) .contentType(MediaType.APPLICATION_JSON))
                .andExpect(jsonPath("$.blogs[*].title",
                        hasItems(endsWith("Title A"), endsWith("Title B"))))
                .andExpect(status().isOk());

答案 1 :(得分:0)

  1. 您不能使用contentType来检查实例的类。 Content-Type用于确定HTTP(S)请求/响应中发送/返回的文本的格式,与编程类型检查无关。它仅规定请求/响应位于json / text-plain / xml等中。

  2. 要检查响应中返回的对象的类型,我们假设响应的格式为JSON(Spring boot中内置的Jackson会进行(un)编组),我们只使用{{ 1}},使用org.hamcrest.Matchers.instanceOf(Class<?> type)检查列表中第一项的类别。

有效代码段:

jsonPath

如果您要检查列表中的每个项目...也许多余?我没有看到代码检查列表中的每个项目,因为您必须进行迭代。当然有办法。