1. Introduction
In this short article weβll focus on the common problem of testing if two List instances contain the same elements in exactly the same order.
List is an ordered data structure so the order of elements matters by design.
have a look at an excerpt from the List#equals Java documentation:
β¦ two lists are defined to be equal if they contain the same elements in the same order.
This definition ensures that the equals method works properly across different implementations of the List interface.
We can use this knowledge when writing assertions.
In the following code snippets, we will be using the following lists as example inputs:
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
In a pure JUnit test, the following assertions will be true:
@Test
public void whenTestingForEquality_ShouldBeEqual() throws Exception {
Assert.assertEquals(list1, list2);
Assert.assertNotSame(list1, list2);
Assert.assertNotEquals(list1, list3);
}
3. TestNG
When using TestNGβs assertions they will look very similarly to JUnitβs assertions, but itβs important to notice that the Assert class comes from a different package:
@Test
public void whenTestingForEquality_ShouldBeEqual() throws Exception {
Assert.assertEquals(list1, list2);
Assert.assertNotSame(list1, list2);
Assert.assertNotEquals(list1, list3);
}
4. AssertJ
If you like to use AssertJ, itβs assertions will look as follows:
@Test
public void whenTestingForEquality_ShouldBeEqual() throws Exception {
assertThat(list1)
.isEqualTo(list2)
.isNotEqualTo(list3);
assertThat(list1.equals(list2)).isTrue();
assertThat(list1.equals(list3)).isFalse();
}
5. Conclusion
In this article, we have explored how to test if two List instances contain the same elements in the same order. The most important part of this problem was the proper understanding of how the List data structure is designed to work.
