Java 断言列表时,assertEquals具体检查什么?

Java 断言列表时,assertEquals具体检查什么?,java,junit,mockito,Java,Junit,Mockito,在我的测试中,我断言我返回的列表是我刚刚创建的列表的字母顺序列表 assertEquals究竟检查什么?它是检查列表的顺序还是只检查其内容 因此,如果我有一个{“Fred”,“Bob”,“Anna”}的列表,那么{“Anna”,“Bob”,“Fred”}的列表2会返回true,因为它们包含相同的对象,而不考虑顺序吗 列表根据定义是有序的,因此我认为它调用equals()并逐个检查两个列表的元素 好的,让我换一种说法,你所说的“列表的顺序”和“列表的内容”是什么意思 如果您创建的列表是[b,a],

在我的测试中,我断言我返回的列表是我刚刚创建的列表的字母顺序列表

assertEquals究竟检查什么?它是检查列表的顺序还是只检查其内容


因此,如果我有一个{“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());
  }