Assert.assertEquals()无法用于自定义类对象

时间:2014-11-11 12:03:00

标签: java junit

尽管我有两个自定义类的数据对象,它们与所有变量相同,但assertEquals()方法失败了。我在这里缺少什么?

2 个答案:

答案 0 :(得分:3)

要比较两个对象,您需要覆盖equals()类的Object方法。

当你创建一个类的两个对象时,比如类A,那么即使它们具有所有相同的变量,对象也是不同的。这是因为equals方法或==都检查对象的引用是否指向同一个对象。

Object o1 = new A();
Object o2 = new A();
o1.equals(o2);

这里equals方法将返回false,即使所有字段都是null,或者即使您为这两个对象分配了相同的值。

Object o1 = new A();
Object o2 = o1;
o1.equals(o2);

这里equals方法将返回true,因为该对象只有一个,o1o2引用都指向同一个对象。

您可以做的是覆盖equals方法

public class A {
    @Override
    public boolean equals(Object obj) {
        if (obj==this) return true;
        if (obj==null || obj.getClass()!=this.getClass()) return false;
        return (this.id==((A) obj).id);
    }
    // You must also override hashCode() method
}

这里我们说如果类A具有相同的id,则它们是相等的。您可以为多个字段执行相同操作。

答案 1 :(得分:0)

比较以检查在equals()函数的帮助下是否发生了等于。您需要在自定义类中重写此方法。



public boolean equals(Object obj) { }




还请确保您也覆盖hashCode()方法。