Gibt es eine prägnante, integrierte Methode, um gleichwertige Aussagen für zwei gleichartige Arrays in JUnit zu treffen? Standardmäßig (zumindest in JUnit 4) scheint es einen Instanzvergleich für das Array-Objekt selbst durchzuführen.
EG, funktioniert nicht:
int[] expectedResult = new int[] { 116800, 116800 };
int[] result = new GraphixMask().sortedAreas(rectangles);
assertEquals(expectedResult, result);
Natürlich kann ich es manuell machen mit:
assertEquals(expectedResult.length, result.length);
for (int i = 0; i < expectedResult.length; i++)
assertEquals("mismatch at " + i, expectedResult[i], result[i]);
..aber gibt es einen besseren Weg?
java
arrays
junit
assertions
mBria
quelle
quelle
java.lang.AssertionError: array lengths differed, expected.length=6 actual.length=7
. Wie die meisten JUnit-Assert.assertFalse( Arrays.equals( expectedResult, result ))
.Sie können verwenden
Arrays.equals(..)
:quelle
Ich ziehe es vor, Arrays in Strings umzuwandeln:
Auf diese Weise kann ich klar erkennen, wo falsche Werte liegen. Dies funktioniert effektiv nur für kleine Arrays, aber ich verwende in meinen Unit-Tests selten Arrays mit mehr als 7 Elementen.
Diese Methode funktioniert für primitive Typen und für andere Typen, wenn bei Überladung
toString
alle wichtigen Informationen zurückgegeben werden.quelle
Assert.assertArrayEquals("message", expectedResult, result)
quelle
Mit junit4 und Hamcrest erhalten Sie eine übersichtliche Methode zum Vergleichen von Arrays. Außerdem werden Details dazu angegeben, wo sich der Fehler in der Fehlerverfolgung befindet.
Fehlerverfolgungsausgabe:
quelle
Ich weiß, dass die Frage für JUnit4 ist, aber wenn Sie bei JUnit3 stecken bleiben, können Sie eine kurze Dienstprogrammfunktion wie diese erstellen:
In JUnit3 ist dies besser als ein direkter Vergleich der Arrays, da genau angegeben wird, welche Elemente unterschiedlich sind.
quelle