java - example - Comparando matrices en aserciones JUnit, forma concisa incorporada?
asserttrue java ejemplo (6)
¿Existe una forma concisa e integrada de hacer aseveraciones iguales en dos arreglos de tipo mecanografiado en JUnit? Por defecto (al menos en JUnit 4) parece hacer una comparación de instancia en el objeto de la matriz en sí.
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?
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 equivocados. Esto funciona de manera efectiva solo para matrices de pequeño tamaño, pero rara vez utilizo matrices con más elementos que 7 en mis pruebas unitarias.
Este método funciona para tipos primitivos y para otros tipos cuando la sobrecarga de toString
devuelve toda la información esencial.
Puedes usar Arrays.equals(..)
:
assertTrue(Arrays.equals(expectedResult, result));
Sé que la pregunta es para JUnit4, pero si estás atrapado en JUnit3, podrías crear una breve función de utilidad como esta:
private void assertArrayEquals(Object[] esperado, Object[] real) {
assertEquals(Arrays.asList(esperado), Arrays.asList(real));
}
En JUnit3, esto es mejor que comparar directamente las matrices, ya que detallará exactamente qué elementos son diferentes.
Usando junit4 y Hamcrest obtienes un método conciso para comparar matrices. También proporciona detalles de dónde está el error en el seguimiento de fallas.
import static org.junit.Assert.*
import static org.hamcrest.CoreMatchers.*;
//...
assertThat(result, is(new int[] {56, 100, 2000}));
Salida de traza de falla:
java.lang.AssertionError:
Expected: is [<56>, <100>, <2000>]
but: was [<55>, <100>, <2000>]
Use el método assertArrayEquals
:
import org.junit.Assert;
...
Assert.assertArrayEquals( expectedResult, result );
Si este método no está disponible, puede haber importado accidentalmente la clase Assert de junit.framework
.