使用 Spring 的 mockMvc,如何检查返回的数据是否包含字符串的一部分?
Using Spring's mockMvc, how do I check if the returned data contains part of a string?
我正在使用 Spring 3.2.11.RELEASE 和 JUnit 4.11。使用 Spring mockMvc 框架,如何检查返回 JSON 数据的方法是否包含特定的 JSON 元素?我有
mockMvc.perform(get("/api/users/" + id))
.andExpect(status().isOk())
.andExpect(content().string("{\"id\":\"" + id + "\"}"));
但这会检查返回的字符串是否完全匹配,我宁愿检查 JSON 字符串是否包含我的本地字段“id”所包含的值。
看起来你可以传递一个 Hamcrest Matcher 而不是一个字符串。应该是这样的:
mockMvc.perform(get("/api/users/" + id))
.andExpect(status().isOk())
.andExpect(content().string(org.hamcrest.Matchers.containsString("{\"id\":\"" + id + "\"}")));
获取 mockMVC 请求的字符串响应的另一种方法如下:
MvcResult result = mockMvc.perform(get("/api/users/" + id))
.andExpect(status().isOk())
.andReturn();
String stringResult = result.getResponse().getContentAsString();
boolean doesContain = stringResult.contains("{\"id\":\"" + id + "\"}");
您还可以在仍然使用 String 方法的同时将整个内容包装在 assertTrue 中:
assertTrue(mockMvc.perform(get("/api/users/" + id))
.andExpect(status().isOk())
.andReturn()
.getResponse()
.getContentAsString()
.contains("{\"id\":\"" + id + "\"}");
我更喜欢已批准的答案,只是想我会提交这个作为另一种选择。
更合适的方法是:
mockMvc.perform(get("/api/users/" + id))
.andExpect(status().isOk())
.andExpect(jsonPath("$.id", org.hamcrest.Matchers.is(id)));
我知道已经很多年了,但我仍然希望我的回答对某人有用 =)
当我需要检查响应中的 json 值是否包含一些字符串时,我使用 containsString
方法:
mockMvc.perform(post("/url")
.contentType(MediaType.APPLICATION_JSON_VALUE)
.andExpect(status().isOk())
.andExpect(jsonPath("$.field1").value(value1))
.andExpect(jsonPath("$.field2", containsString(value2)));
我正在使用 Spring 3.2.11.RELEASE 和 JUnit 4.11。使用 Spring mockMvc 框架,如何检查返回 JSON 数据的方法是否包含特定的 JSON 元素?我有
mockMvc.perform(get("/api/users/" + id))
.andExpect(status().isOk())
.andExpect(content().string("{\"id\":\"" + id + "\"}"));
但这会检查返回的字符串是否完全匹配,我宁愿检查 JSON 字符串是否包含我的本地字段“id”所包含的值。
看起来你可以传递一个 Hamcrest Matcher 而不是一个字符串。应该是这样的:
mockMvc.perform(get("/api/users/" + id))
.andExpect(status().isOk())
.andExpect(content().string(org.hamcrest.Matchers.containsString("{\"id\":\"" + id + "\"}")));
获取 mockMVC 请求的字符串响应的另一种方法如下:
MvcResult result = mockMvc.perform(get("/api/users/" + id))
.andExpect(status().isOk())
.andReturn();
String stringResult = result.getResponse().getContentAsString();
boolean doesContain = stringResult.contains("{\"id\":\"" + id + "\"}");
您还可以在仍然使用 String 方法的同时将整个内容包装在 assertTrue 中:
assertTrue(mockMvc.perform(get("/api/users/" + id))
.andExpect(status().isOk())
.andReturn()
.getResponse()
.getContentAsString()
.contains("{\"id\":\"" + id + "\"}");
我更喜欢已批准的答案,只是想我会提交这个作为另一种选择。
更合适的方法是:
mockMvc.perform(get("/api/users/" + id))
.andExpect(status().isOk())
.andExpect(jsonPath("$.id", org.hamcrest.Matchers.is(id)));
我知道已经很多年了,但我仍然希望我的回答对某人有用 =)
当我需要检查响应中的 json 值是否包含一些字符串时,我使用 containsString
方法:
mockMvc.perform(post("/url")
.contentType(MediaType.APPLICATION_JSON_VALUE)
.andExpect(status().isOk())
.andExpect(jsonPath("$.field1").value(value1))
.andExpect(jsonPath("$.field2", containsString(value2)));