我有一個類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'只檢查對象標識。看到我的答案。 –