Comparación de matrices en afirmaciones JUnit, ¿de forma concisa e integrada?
¿Existe una forma concisa e integrada de hacer afirmaciones iguales en dos matrices del mismo tipo en JUnit? De forma predeterminada (al menos en JUnit 4), parece realizar una comparación de instancias en el propio objeto de matriz.
Por ejemplo, no funciona:
int[] expectedResult = new int[] { 116800, 116800 };
int[] result = new GraphixMask().sortedAreas(rectangles);
assertEquals(expectedResult, result);
Por supuesto, puedo hacerlo manualmente con:
assertEquals(expectedResult.length, result.length);
for (int i = 0; i < expectedResult.length; i++)
assertEquals("mismatch at " + i, expectedResult[i], result[i]);
..¿Pero hay una manera mejor?
Utilice el método de org.junit.AssertassertArrayEquals
:
import org.junit.Assert;
...
Assert.assertArrayEquals( expectedResult, result );
Si este método no está disponible, es posible que haya importado accidentalmente la clase Assert de junit.framework
.
Puedes usar Arrays.equals(..)
:
assertTrue(Arrays.equals(expectedResult, result));
Prefiero convertir matrices en cadenas:
Assert.assertEquals(
Arrays.toString(values),
Arrays.toString(new int[] { 7, 8, 9, 3 }));
De esta manera puedo ver claramente dónde están los valores incorrectos. Esto funciona eficazmente sólo para matrices de tamaño pequeño, pero rara vez uso matrices con más de 7 elementos en mis pruebas unitarias.
Este método funciona para tipos primitivos y para otros tipos cuando la sobrecarga toString
devuelve toda la información esencial.