我想测试的Spring方法
SettableMass
我希望确保所有对/ files的调用都使用List [FileListRequest]进行响应。怎么样?
这是测试的方法。
@RequestMapping(value="/files", method=RequestMethod.GET)
@ResponseBody
public List<FileListRequest> get() {
return getMainController().getAllFiles();
}
我可以简单地替换SOMETHING还是我完全错了?
我可以对perform()返回的对象运行assert方法吗?
答案 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)
您不能使用contentType
来检查实例的类。 Content-Type
用于确定HTTP(S)请求/响应中发送/返回的文本的格式,与编程类型检查无关。它仅规定请求/响应位于json
/ text-plain
/ xml
等中。
要检查响应中返回的对象的类型,我们假设响应的格式为JSON(Spring boot中内置的Jackson会进行(un)编组),我们只使用{{ 1}},使用org.hamcrest.Matchers.instanceOf(Class<?> type)
检查列表中第一项的类别。
有效代码段:
jsonPath
如果您要检查列表中的每个项目...也许多余?我没有看到代码检查列表中的每个项目,因为您必须进行迭代。当然有办法。