我有一个类MySchool
:Assert.assertEquals
public class MySchool{
private long timestamp;
private SchoolEvent event;
private Object value;
//getter & setters
...
@Override
public String toString() {
return "MySchool [timestamp=" + timestamp + ", event="
+ event + ", value=" + value + "]";
}
}
SchoolEvent
是一个枚举类型:
public static enum SchoolEvent {
CEREMONY, HOLIDAY
}
我尝试使用Assert.assertEquals()比较学校两个List:
List<MySchool> schoolList1 = generateSchools();
List<MySchool> schoolList2 = readSchoolsFromFile();
Assert.assertEquals(schoolList1, schoolList2);
它失败,出现以下错误:
expected: java.util.ArrayList<[MySchool [timestamp=0, event=CEREMONY, value=null], MySchool [timestamp=0, event=HOLIDAY, value=null]]>
but was: java.util.ArrayList<[MySchool [timestamp=0, event=CEREMONY, value=null], MySchool [timestamp=0, event=HOLIDAY, value=null]]>
我不明白为什么错误听起来不像是一个错误,我的意思是只检查错误消息,两个列表中的每个元素对象的每个字段是均等的。
我还检查Java文档有关List#equal,它也说:
two lists are defined to be equal if they contain the same elements in the same order.
那么,为什么在断言()失败?
你的'MySchool'类不会覆盖'equals' ... –
为什么我需要重写'MySchool'中的'equals'?错误消息显示一切都是平等的。 – user842225
因为默认情况下,'equals'只检查对象标识。看到我的答案。 –