错误讯息:
Expected: UserDTO<UserDTO{username='user', password='password', email='mail@mail'}>
Actual: UserDTO<UserDTO{username='user', password='password', email='mail@mail'}>
唯一的区别是'&gt;'之后的空格预期的字符串化对象。 我不知道为什么,因为我比较了两个UserDTO对象。 有没有人有同样的问题?
更新: 等于UserDTO的实现。
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
UserDTO userDTO = (UserDTO) o;
if (username != null ? !username.equals(userDTO.username) : userDTO.username != null) return false;
if (password != null ? !password.equals(userDTO.password) : userDTO.password != null) return false;
return (email != null ? !email.equals(userDTO.email) : userDTO.email != null);
}
答案 0 :(得分:2)
这个
return (email != null ? !email.equals(userDTO.email) : userDTO.email != null);
如果电子邮件相同,返回false,如果不相等则返回true。
你的意思是这样的:
return (email==null ? userDTO.email==null : email.equals(userDTO.email));
答案 1 :(得分:0)
比较失败消息为您提供对象状态,指出您的期望和得到的结果
事实上两个对象显示相同的状态,但这些状态不等于assertEquals()
意味着equals()
方法不依赖于声明的字段的值,或者它也可能意味着{{ 1}}包含逻辑错误。
对你而言,这是第二种情况:
equals()
应该是:
return (email != null ? !email.equals(userDTO.email) : userDTO.email != null);
好像return (email != null ? email.equals(userDTO.email) : userDTO.email == null);
不是email
,您希望在此字段上返回null
结果,而如果equals()
是email
,则您希望{ {1}} null
如果return
,则true
。
无论如何,使用other.email == null
比较每个字段可以大大简化false
方法,因为它可以避免对每个字段进行equals()
检查:
Objects.equals()