【问题标题】:Easy way to compare ArrayLists for equality using JUnit?使用 JUnit 比较 ArrayList 是否相等的简单方法?
【发布时间】:2009-10-03 03:11:17
【问题描述】:

使用 JUnit 比较 ArrayList 是否相等的简单方法是什么?我需要实现相等接口吗?或者有没有简单的 JUnit 方法让它变得更简单?

【问题讨论】:

标签: java junit


【解决方案1】:

你不需要为列表相等做任何特别的事情,只需使用 assertEquals。

ArrayList 和其他列表通过使用对象的 equals() 方法检查列表对应位置的所有对象是否相等来实现 equals()。因此,您可能需要检查列表中的对象是否正确实现。

【讨论】:

  • 这个答案的问题是它不会在失败时报告列表的内容。尝试使用 assertThat(a, is(b));反而。 starblue 关于实施 equals 的警告仍然有效。另请参阅duplicate question 3236880:那里有更好的答案和代码示例。
  • 未来更新:这似乎不适用于原始类型的数组,并且在任何一种情况下,assertEquals(Object[], Object[]) 都已弃用。使用 assertArrayEquals。
  • @johncip 这对数组来说是个好建议,但问题是关于ArrayList
  • 糟糕!我正在查看一些数组相等问题,但不知何故混入其中。应该更仔细地阅读。在那种情况下,显然你对 arrayEquals 的看法是正确的。
【解决方案2】:

您可能需要查看List.equals 的文档。

【讨论】:

  • 那么这是否意味着如果我有一个 List 我需要为 SomeClass 覆盖 equals ?
  • 它将列表的元素与Object.equals进行比较。默认情况下,如果它们是同一个实例,这将是真的。如果要允许具有相同内部数据的不同对象进行匹配,那么它们应该为SomeClass 提供equals(和hashCode)方法。
【解决方案3】:

我认为这可能是一个过于简单的答案(尽管它是正确的)。测试 ArrayLists 是否相等意味着您已经考虑到元素的相等性。如果元素是整数,那一切都很好。但是,如果它们是您自己的域类的实例,那么您应该意识到围绕相等(和克隆)的陷阱。请查看:

http://www.artima.com/lejava/articles/equality.html

关于实现平等的一组很好的提示。顺便说一句:如果您需要克隆对象,请考虑使用复制构造函数而不是实现可克隆。 Cloneable 引入了一整套您可能没想到的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    • 2013-07-26
    • 2018-05-21
    • 2015-03-13
    • 2015-09-16
    • 1970-01-01
    相关资源
    最近更新 更多