我有简单的集成测试
@Test
public void shouldReturnErrorMessageToAdminWhenCreatingUserWithUsedUserName() throws Exception {
mockMvc.perform(post("/api/users").header("Authorization", base64ForTestUser).contentType(MediaType.APPLICATION_JSON)
.content("{\"userName\":\"testUserDetails\",\"firstName\":\"xxx\",\"lastName\":\"xxx\",\"password\":\"xxx\"}"))
.andDo(print())
.andExpect(status().isBadRequest())
.andExpect(?);
}
在最后一行中,我想比较响应体中接收到的字符串和预期的字符串
我得到的答复是:
MockHttpServletResponse:
Status = 400
Error message = null
Headers = {Content-Type=[application/json]}
Content type = application/json
Body = "Username already taken"
Forwarded URL = null
Redirected URL = null
尝试了content()、body()的一些技巧,但没有效果。
@Sotirios Delimanolis答案完成该工作,但是我正在这个mockMvc断言中查找比较字符串
所以它在这里
.andExpect(content().string("\"Username already taken - please try with different username\""));
我断言当然失败了:
java.lang.AssertionError: Response content expected:
<"Username already taken - please try with different username"> but was:<"Something gone wrong">
因为:
MockHttpServletResponse:
Body = "Something gone wrong"
所以这就是它工作的证明!
您可以调用andreturn()
并使用返回的MVCRESULT
对象来获取作为字符串
的内容。
见下文:
MvcResult result = mockMvc.perform(post("/api/users").header("Authorization", base64ForTestUser).contentType(MediaType.APPLICATION_JSON)
.content("{\"userName\":\"testUserDetails\",\"firstName\":\"xxx\",\"lastName\":\"xxx\",\"password\":\"xxx\"}"))
.andDo(MockMvcResultHandlers.print())
.andExpect(status().isBadRequest())
.andReturn();
String content = result.getResponse().getContentAsString();
// do what you will
问题内容: 我有简单的集成测试 在最后一行中,我想将响应正文中收到的字符串与预期字符串进行比较 作为回应,我得到: 使用content(),body()尝试了一些技巧,但没有任何效果。 问题答案: @Sotirios Delimanolis回答完成了这项工作,但是我一直在寻找在此模拟Mvc断言中比较字符串的方法 所以这是 当然,我的主张失败了: 因为: 因此,这证明它有效!
这是我在控制器中的方法,由 我希望作为我的json。 这是我的JUnit测试: 以下是控制台输出: 甚至是是一个空字符串。 有人能建议如何在我的JUnit测试方法中获取JSON,这样我就可以完成我的测试用例了。
问题内容: 这是我的控制器内部的方法,其注释为 我期望作为我的json。 这是我的JUnit测试: 这是控制台输出: Even 是一个空字符串。 有人可以建议如何在我的JUnit测试方法中获取JSON,以便完成测试用例。 问题答案: 我使用TestNG进行单元测试。但是在Spring Test Framework中,它们看起来都很相似。所以我相信你的测试如下 如果要检查json键和值,可以使用js
问题内容: 如果字符串中除了下划线以外不包含任何特殊字符,则只能在其程序中使用。我该如何检查? 我尝试使用unicodedata库。但是特殊字符只是被标准字符所代替。 问题答案: 您可以像这样使用和运行 用这条线 我们正在准备不允许使用的标点符号列表。如您所愿,我们正在从列表中删除并准备新的。因为在集合中查找速度更快。 如果至少一个字符位于中,则函数将返回。 编辑: 如评论中所述,这是正则表达式解
是否可以使用MockMCV比较实际的响应实体和从控制器返回的响应实体?
问题内容: 在我的应用程序中,我从LDAP获取用户信息,有时完整的用户名使用了错误的字符集。例如: 它也可以是英语或俄语,并可以正确显示。如果用户名更改,它将在数据库中更新。即使我更改数据库中的值,它也无法解决问题。 我可以在保存之前修复此问题 但是,如果我将它用于包含俄语字符的字符串(例如,“Тест61Тестович61”),则会得到类似“ ??? 61 ??????? 61”的信息。 您能