Existe uma maneira concisa e integrada de fazer asserções iguais em duas matrizes do mesmo tipo no JUnit? Por padrão (pelo menos no JUnit 4), parece fazer uma comparação de instância no próprio objeto da matriz.
EG, não funciona:
int[] expectedResult = new int[] { 116800, 116800 };
int[] result = new GraphixMask().sortedAreas(rectangles);
assertEquals(expectedResult, result);
Claro, eu posso fazer isso manualmente com:
assertEquals(expectedResult.length, result.length);
for (int i = 0; i < expectedResult.length; i++)
assertEquals("mismatch at " + i, expectedResult[i], result[i]);
..mas existe uma maneira melhor?
java
arrays
junit
assertions
mBria
fonte
fonte
java.lang.AssertionError: array lengths differed, expected.length=6 actual.length=7
. Como a maioria das mensagens de falha JUnit não é tão útil ... Eu aconselho usando algum quadro afirmaçãoAssert.assertFalse( Arrays.equals( expectedResult, result ))
.Você pode usar
Arrays.equals(..)
:fonte
Eu prefiro converter matrizes em strings:
Desta forma, posso ver claramente onde estão os valores errados. Isso funciona efetivamente apenas para matrizes de tamanho pequeno, mas raramente uso matrizes com mais itens que 7 em meus testes de unidade.
Este método funciona para tipos primitivos e para outros tipos quando a sobrecarga
toString
retorna todas as informações essenciais.fonte
Assert.assertArrayEquals("message", expectedResult, result)
fonte
Usando junit4 e Hamcrest, você obtém um método conciso de comparação de matrizes. Ele também fornece detalhes de onde o erro está no rastreamento de falha.
Saída de rastreamento de falha:
fonte
Eu sei que a pergunta é para o JUnit4, mas se você estiver preso no JUnit3, poderá criar uma função de utilitário curta assim:
No JUnit3, isso é melhor do que comparar diretamente as matrizes, pois detalha exatamente quais elementos são diferentes.
fonte