Existe-t-il une manière concise et intégrée de faire des assertions égales sur deux tableaux de même type dans JUnit? Par défaut (au moins dans JUnit 4), il semble faire une comparaison d'instance sur l'objet tableau lui-même.
EG, ne fonctionne pas:
int[] expectedResult = new int[] { 116800, 116800 };
int[] result = new GraphixMask().sortedAreas(rectangles);
assertEquals(expectedResult, result);
Bien sûr, je peux le faire manuellement avec:
assertEquals(expectedResult.length, result.length);
for (int i = 0; i < expectedResult.length; i++)
assertEquals("mismatch at " + i, expectedResult[i], result[i]);
..Mais y a-t-il une meilleure façon?
java
arrays
junit
assertions
mBria
la source
la source
java.lang.AssertionError: array lengths differed, expected.length=6 actual.length=7
. Comme la plupart des messages d'échec JUnit, ce n'est pas si utile ... Je vous conseille d'utiliser un cadre d'assertionAssert.assertFalse( Arrays.equals( expectedResult, result ))
.Vous pouvez utiliser
Arrays.equals(..)
:la source
Je préfère convertir des tableaux en chaînes:
de cette façon, je peux voir clairement où se trouvent les mauvaises valeurs. Cela ne fonctionne efficacement que pour les tableaux de petite taille, mais j'utilise rarement des tableaux avec plus d'éléments que 7 dans mes tests unitaires.
Cette méthode fonctionne pour les types primitifs et pour les autres types lorsque la surcharge de
toString
renvoie toutes les informations essentielles.la source
Assert.assertArrayEquals("message", expectedResult, result)
la source
En utilisant junit4 et Hamcrest, vous obtenez une méthode concise de comparaison de tableaux. Il donne également des détails sur l'emplacement de l'erreur dans la trace des échecs.
Sortie de suivi des échecs:
la source
Je sais que la question concerne JUnit4, mais si vous êtes bloqué sur JUnit3, vous pouvez créer une courte fonction utilitaire comme celle-ci:
Dans JUnit3, c'est mieux que de comparer directement les tableaux, car cela détaillera exactement quels éléments sont différents.
la source