Comparación de matrices en afirmaciones JUnit, ¿de forma concisa e integrada?

Resuelto mBria asked hace 14 años • 8 respuestas

¿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?

mBria avatar Nov 20 '10 01:11 mBria
Aceptado

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.

Andy Thomas avatar Nov 19 '2010 19:11 Andy Thomas

Puedes usar Arrays.equals(..):

assertTrue(Arrays.equals(expectedResult, result));
Bozho avatar Nov 19 '2010 18:11 Bozho

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 toStringdevuelve toda la información esencial.

csharpfolk avatar Feb 13 '2016 09:02 csharpfolk