在Java中检查两个列表是否相等

评论 0 浏览 0 2016-07-18

1.绪论

在这篇短文中,我们将重点讨论测试两个List实例是否以完全相同的顺序包含相同的元素这一常见问题。

List是一个有序的数据结构,所以元素的顺序在设计上是很重要的。

看一下List#equals Java文档的摘录。

… two lists are defined to be equal if they contain the same elements in the same order.

这个定义保证了equals方法在List接口的不同实现中都能正常工作。

在编写断言时,我们可以使用这些知识。

在下面的代码片断中,我们将使用以下列表作为输入的例子。

List<String> list1 = Arrays.asList("1", "2", "3", "4");
List<String> list2 = Arrays.asList("1", "2", "3", "4");
List<String> list3 = Arrays.asList("1", "2", "4", "3");

2. JUnit

在一个纯粹的JUnit测试中,以下断言将是真的。

@Test
public void whenTestingForEquality_ShouldBeEqual() throws Exception {
    Assert.assertEquals(list1, list2);
    Assert.assertNotSame(list1, list2);
    Assert.assertNotEquals(list1, list3);
}

3. TestNG

当使用TestNG的断言时,它们看起来与JUnit的断言非常相似,但重要的是要注意Assert类来自一个不同的包。

@Test
public void whenTestingForEquality_ShouldBeEqual() throws Exception {
    Assert.assertEquals(list1, list2);
    Assert.assertNotSame(list1, list2);
    Assert.assertNotEquals(list1, list3);
}

4. AssertJ

如果你喜欢使用 AssertJ,它的断言如下所示:

@Test
public void whenTestingForEquality_ShouldBeEqual() throws Exception {
    assertThat(list1)
      .isEqualTo(list2)
      .isNotEqualTo(list3);

    assertThat(list1.equals(list2)).isTrue();
    assertThat(list1.equals(list3)).isFalse();
}

5.总结

在这篇文章中,我们探讨了如何测试两个List实例是否以相同的顺序包含相同的元素。这个问题最重要的部分是正确理解List数据结构是如何设计的。

所有的代码例子都可以在GitHub上找到。

最后更新2022-12-18
0 个评论
标签