1. 序章

この短い記事では、2つのListインスタンスにまったく同じ順序で同じ要素が含まれているかどうかをテストするという一般的な問題に焦点を当てます。

リストorderedデータ構造であるため、要素の順序は設計上重要です。

List#equalsJavaドキュメントからの抜粋をご覧ください。

…2つのリストは、同じ要素が同じ順序で含まれている場合、等しいと定義されます。

この定義により、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. 結論

この記事では、2つのListインスタンスに同じ要素が同じ順序で含まれているかどうかをテストする方法について説明しました。 この問題の最も重要な部分は、Listデータ構造がどのように機能するように設計されているかを正しく理解することでした。

すべてのコード例はGitHubにあります。