Java 断言列表时,assertEquals具体检查什么?
在我的测试中,我断言我返回的列表是我刚刚创建的列表的字母顺序列表 assertEquals究竟检查什么?它是检查列表的顺序还是只检查其内容Java 断言列表时,assertEquals具体检查什么?,java,junit,mockito,Java,Junit,Mockito,在我的测试中,我断言我返回的列表是我刚刚创建的列表的字母顺序列表 assertEquals究竟检查什么?它是检查列表的顺序还是只检查其内容 因此,如果我有一个{“Fred”,“Bob”,“Anna”}的列表,那么{“Anna”,“Bob”,“Fred”}的列表2会返回true,因为它们包含相同的对象,而不考虑顺序吗 列表根据定义是有序的,因此我认为它调用equals()并逐个检查两个列表的元素 好的,让我换一种说法,你所说的“列表的顺序”和“列表的内容”是什么意思 如果您创建的列表是[b,a],
因此,如果我有一个{“Fred”,“Bob”,“Anna”}的列表,那么{“Anna”,“Bob”,“Fred”}的列表2会返回true,因为它们包含相同的对象,而不考虑顺序吗 列表根据定义是有序的,因此我认为它调用equals()并逐个检查两个列表的元素 好的,让我换一种说法,你所说的“列表的顺序”和“列表的内容”是什么意思 如果您创建的列表是[b,a],则有序列表将是[a,b]。 [a,b]只能等于[a,b],因为列表是有序的 两个集合[a,b]和[b,a]不是有序的,而是相等的
另外,如果您查看源代码,它确实调用了equals(),那么为什么要进行否决?junit.framework.Assert中没有特殊的
assertEquals
函数,它接受列表
或集合
对象
当你说
assertEquals时(列表1,列表2)
它只检查list1.equals(list2)
和如果不是AssertionError
,如果您遵循jUnit的源代码。您将看到,assertEquals
最终会对isEquals
方法中提供的对象调用equals
方法
private static boolean isEquals(Object expected, Object actual) {
return expected.equals(actual);
}
源代码:
这将调用列表
实现中的.equals()
方法。下面是“ArrayList”的.equals()
实现的示例
ArrayList.equals()
公共布尔等于(对象o){
if(o==this)//相等性检查
返回true;
if(!(o instanceof List))//类型检查
返回false;
ListIterator e1=ListIterator();
ListIterator e2=((List)o).ListIterator();
而(e1.hasNext()&&e2.hasNext()){
eo1=e1.next();
对象o2=e2.next();
if(!(o1==null?o2==null:o1.equals(o2))//列表内容的相等性检查
返回false;
}
返回!(e1.hasNext()| e2.hasNext());
}
不,因为这是一个列表,而不是一个集合,请看我的答案。这是您可以很快自己尝试的东西。
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());
}