在我的測試中,我聲稱我返回的列表是我剛剛創建的列表的按字母順序排列的列表。assertEquals在聲明列表時究竟檢查什麼?
assertEquals檢查的是什麼?它檢查列表的順序還是其內容?所以如果我有{「Fred」,「Bob」,「Anna」}的列表{Anna},「Bob」,「Fred」}的列表2返回true,因爲它們包含相同的對象,不管命令如何?
在我的測試中,我聲稱我返回的列表是我剛剛創建的列表的按字母順序排列的列表。assertEquals在聲明列表時究竟檢查什麼?
assertEquals檢查的是什麼?它檢查列表的順序還是其內容?所以如果我有{「Fred」,「Bob」,「Anna」}的列表{Anna},「Bob」,「Fred」}的列表2返回true,因爲它們包含相同的對象,不管命令如何?
如果按照JUnit的源代碼。您將看到assertEquals
最終將調用方法isEquals
中提供的對象的equals
方法。
private static boolean isEquals(Object expected, Object actual) {
return expected.equals(actual);
}
源代碼:https://github.com/junit-team/junit/blob/master/src/main/java/org/junit/Assert.java
這將調用上的List
實施.equals()
方法。這裏是source code的.equals()
實現`ArrayList'。
ArrayList.equals()
public boolean equals(Object o) {
if (o == this) //Equality check
return true;
if (!(o instanceof List)) //Type check
return false;
ListIterator<E> e1 = listIterator();
ListIterator e2 = ((List) o).listIterator();
while(e1.hasNext() && e2.hasNext()) {
E o1 = e1.next();
Object o2 = e2.next();
if (!(o1==null ? o2==null : o1.equals(o2))) //equality check of list contents
return false;
}
return !(e1.hasNext() || e2.hasNext());
}
列表按照定義排序,所以我會說它調用equals()並逐個檢查這兩個列表中的元素。
好的讓我改述一下,「列表的順序」和「它的內容」是什麼意思?
如果您創建的列表是[b,a],那麼排序的列表將是[a,b]。 [a,b]只能等於[a,b],因爲List是排序的。
兩組[a,b]和[b,a]不是有序的,而是相等的。
再加上如果你看看源代碼,它會調用equals(),那麼爲什麼downvotes?
在junit.framework.Assert
中沒有特別的assertEquals
函數,它接受List
或Collection
對象。
當你說assertEquals(list1, list2);
它只是檢查是否list1.equals(list2)
和如果沒有拋出AssertionError
沒有因爲它是一個列表,而不是一個集,看到我的回答。 – Djon
這是你可以很快嘗試自己的東西。 –