断言列表时assertEquals究竟检查了什么?

时间:2013-05-28 09:17:14

标签: java junit mockito

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

assertEquals究竟检查了什么?它检查列表的顺序或仅检查其内容吗?

因此,如果我有{“Fred”,“Bob”,“Anna”}的列表,则会列出{“Anna”,“Bob”,“Fred”}中的2,因为它们包含相同的对象,所以返回true订单?

3 个答案:

答案 0 :(得分:12)

如果您遵循jUnit的源代码。您会看到assertEquals最终在equals方法中提供的对象上调用isEquals方法。

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

这会调用.equals()方法来实现List。这是{ArrayList'的.equals()实现的source code

<强> 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());
  }

答案 1 :(得分:1)

List按定义排序,所以我会说它调用equals()并逐个检查两个列表的元素。

好的,让我重新说一下,“列表的排序”和“其内容”是什么意思?

如果您创建的列表是[b,a],则订购的列表将是[a,b]。 [a,b]只能等于[a,b],因为List是有序的。

两组,[a,b]和[b,a]不是有序但等于。

另外,如果你查看源代码,它会调用equals(),那么为什么要进行downvotes?

答案 2 :(得分:1)

assertEquals中没有特殊的junit.framework.Assert函数接受ListCollection对象。

当您说assertEquals(list1, list2);时,它只会检查list1.equals(list2)是否会引发AssertionError