Junit 4 assertEquals(...)无法比较两个对象

时间:2017-08-30 21:11:23

标签: java whitespace junit4

错误讯息:

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

    }

2 个答案:

答案 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()