Verifique se duas listas são iguais em Java
1. Introdução
Neste breve artigo, vamos nos concentrar no problema comum de testar se duas instâncias deList contêm os mesmos elementos exatamente na mesma ordem.
List é uma estrutura de dadosordered, portanto, a ordem dos elementos é importante por design.
dê uma olhada em um trecho da documentação JavaList#equals:
… Duas listas são definidas como iguais se contiverem os mesmos elementos na mesma ordem.
Essa definição garante que o método equals funcione corretamente em diferentes implementações da interface List.
Podemos usar esse conhecimento ao escrever afirmações.
Nos seguintes trechos de código, usaremos as seguintes listas como entradas de exemplo:
List list1 = Arrays.asList("1", "2", "3", "4");
List list2 = Arrays.asList("1", "2", "3", "4");
List list3 = Arrays.asList("1", "2", "4", "3");
2. JUnit
Em um teste JUnit puro, as seguintes afirmações são verdadeiras:
@Test
public void whenTestingForEquality_ShouldBeEqual() throws Exception {
Assert.assertEquals(list1, list2);
Assert.assertNotSame(list1, list2);
Assert.assertNotEquals(list1, list3);
}
3. TestNG
Ao usar as afirmações do TestNG, elas serão muito semelhantes às afirmações do JUnit, mas é importante notar que a classeAssert vem de um pacote diferente:
@Test
public void whenTestingForEquality_ShouldBeEqual() throws Exception {
Assert.assertEquals(list1, list2);
Assert.assertNotSame(list1, list2);
Assert.assertNotEquals(list1, list3);
}
4. AssertJ
Se você gosta de usarAssertJ, suas afirmações serão as seguintes:
@Test
public void whenTestingForEquality_ShouldBeEqual() throws Exception {
assertThat(list1)
.isEqualTo(list2)
.isNotEqualTo(list3);
assertThat(list1.equals(list2)).isTrue();
assertThat(list1.equals(list3)).isFalse();
}
5. Conclusão
Neste artigo, exploramos como testar se duas instâncias deList contêm os mesmos elementos na mesma ordem. A parte mais importante desse problema foi a compreensão adequada de como a estrutura de dadosList foi projetada para funcionar.
Todos os exemplos de código podem ser encontrados emGitHub.