assertEquals()在两个对象上

时间:2017-12-02 05:34:20

标签: java junit

使用assertEquals()比较两个对象时,是否考虑了内部结构。对象的属性?

假设我有一个类A如下:

public class A {
    private int ID;
    private String name;
    private String address;
}

假设提供的对象(将与A的对象进行比较)属性的顺序不同,那么assertEquals()会做什么?是否有一种强有力的方法来实现另一种方式?

2 个答案:

答案 0 :(得分:2)

Assert.assertEquals()将使用该课程' equals()方法。

如果您的班级覆盖equals()进行深入比较,那么将使用的是什么。如果您不覆盖equals(),那么您只会根据身份相同性获得Object#equals()

换句话说,您决定equals()的含义。

答案 1 :(得分:2)

@JimGarrison是对的 - assertEquals()只会调用对象上的equals()方法来确定相等。

要回答你的问题,“是否有一种强有力的方法可以用其他方式完成?”, 如果由于某种原因无法在类上正确实现equals()方法,并且您希望根据字段值来评估对象的相等性,请考虑使用EqualsBuilder's reflectionEquals() method。它非常强大,允许您排除所需的任何字段。

要回答你的另一个问题,“假设提供的对象的属性顺序不同,那么assertEquals()会做什么?”,它只会调用equals()另一个例子的方法。例如,如果您拨打assertEquals(a, b),那么最终会调用a.equals(b)。但是,如果您拨打assertEquals(b, a),那么最终会调用b.equals(a)

我希望有所帮助。