controller层单元测试[当service传入的参数是对象]

  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;
  }

你可能感兴趣的:(controller层单元测试[当service传入的参数是对象])