int id=1;
when(userService.addUser(userRequest)).thenReturn(id);
MvcResult result=mockMvc.perform(post("/" + VERSION + "/api/user")
.content(toJson(userRequest))
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON))
.andExpect(status().isCreated())
.andReturn();
String userResponse=result.getResponse().getContentAsString();
String content= JsonUtil.readObjectFromJson(userResponse, Map.class).get("id").toString();
Assert.assertEquals(content,String.valueOf(id));
如上面代码所示,userService传入的参数是一个message对象,因此你mock service当传入是userrequest,得到结果是1.但是当测试时,将userRequest转化成json传入POST方法时,最终组装好传入service的userRequest的对象,java 默认的equeal方法不会认为这两个对象是一样的。
所以,我们要做的是重载userRequest的equal方法
就像这样
@Override
public boolean equals(Object obj) {
if (!obj.getClass().equals(UserRequest.class)) {
return false;
}
UserRequest other = (UserRequest) obj;
if (id != other.id) {
return false;
}
if (!username.equals(other.username)) {
return false;
}
if (!phone.equals(other.phone)) {
return false;
}
if (email!=null&&!email.equals(other.email)) {
return false;
}
if (!password.equals(other.password)) {
return false;
}
if (!confirmPassword.equals(other.confirmPassword)) {
return false;
}
return true;
}
网友评论