6

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

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

因此,如果我有一个 { "Fred", "Bob", "Anna" } 的列表,那么 { "Anna", "Bob", "Fred" } 中的 2 个将返回 true,因为它们包含相同的对象,而不管顺序如何?

4

3 回答 3

13

如果您遵循 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()

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());
  }
于 2013-05-28T09:22:12.487 回答
3

没有接受或反对的特殊assertEquals功能。junit.framework.AssertListCollection

当你说它只是assertEquals(list1, list2);检查是否list1.equals(list2)抛出AssertionError

于 2013-05-28T09:22:01.837 回答
1

List 根据定义是有序的,所以我会说它调用 equals() 并一一检查两个列表的元素。

好吧,让我换个说法,“列表的顺序”和“它的内容”是什么意思?

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

两个集合 [a,b] 和 [b,a] 不是有序的,而是相等的。

另外,如果您查看源代码,它确实调用了 equals(),那么为什么要投反对票呢?

于 2013-05-28T09:19:49.147 回答