使用assertEquals()
比较两个对象时,是否考虑了内部结构。对象的属性?
假设我有一个类A如下:
public class A {
private int ID;
private String name;
private String address;
}
假设提供的对象(将与A
的对象进行比较)属性的顺序不同,那么assertEquals()
会做什么?是否有一种强有力的方法来实现另一种方式?
答案 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)
。
我希望有所帮助。