¿Hay una forma concisa e integrada de hacer afirmaciones iguales en dos matrices de tipo similar en JUnit? Por defecto (al menos en JUnit 4) parece hacer una comparación de instancia en el objeto de matriz en sí.
EG, 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?
java
arrays
junit
assertions
mBria
fuente
fuente
java.lang.AssertionError: array lengths differed, expected.length=6 actual.length=7
. Como la mayoría de los mensajes de error de JUnit no es tan útil ... Aconsejo usar algún marco de afirmaciónAssert.assertFalse( Arrays.equals( expectedResult, result ))
.Puedes usar
Arrays.equals(..)
:fuente
Prefiero convertir matrices en cadenas:
De esta manera puedo ver claramente dónde están los valores incorrectos. Esto funciona de manera efectiva solo para matrices de pequeño tamaño, pero rara vez uso 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
retorna toda la información esencial.fuente
Assert.assertArrayEquals("message", expectedResult, result)
fuente
Usando junit4 y Hamcrest obtienes un método conciso para comparar matrices. También da detalles de dónde está el error en la traza de falla.
Salida de seguimiento de falla:
fuente
Sé que la pregunta es para JUnit4, pero si está atascado en JUnit3, podría crear una función de utilidad corta como esa:
En JUnit3, esto es mejor que comparar directamente las matrices, ya que detallará exactamente qué elementos son diferentes.
fuente