Czy istnieje zwięzły, wbudowany sposób wykonywania asercji równości na dwóch tablicach o podobnym typie w JUnit? Domyślnie (przynajmniej w JUnit 4) wydaje się, że wykonuje porównanie instancji na samym obiekcie tablicy.
EG, nie działa:
int[] expectedResult = new int[] { 116800, 116800 };
int[] result = new GraphixMask().sortedAreas(rectangles);
assertEquals(expectedResult, result);
Oczywiście mogę to zrobić ręcznie:
assertEquals(expectedResult.length, result.length);
for (int i = 0; i < expectedResult.length; i++)
assertEquals("mismatch at " + i, expectedResult[i], result[i]);
..ale czy jest lepszy sposób?
java
arrays
junit
assertions
mBria
źródło
źródło
java.lang.AssertionError: array lengths differed, expected.length=6 actual.length=7
. Jak większość komunikatów o błędach JUnit, nie jest to tak pomocne ... Radzę użyć jakiegoś frameworka asercjiAssert.assertFalse( Arrays.equals( expectedResult, result ))
.Możesz użyć
Arrays.equals(..)
:źródło
Wolę konwertować tablice na ciągi:
w ten sposób wyraźnie widzę, gdzie są złe wartości. Działa to skutecznie tylko w przypadku tablic o małych rozmiarach, ale rzadko używam tablic zawierających więcej elementów niż 7 w moich testach jednostkowych.
Ta metoda działa dla typów pierwotnych i dla innych typów, gdy przeciążenie
toString
zwraca wszystkie niezbędne informacje.źródło
Assert.assertArrayEquals("message", expectedResult, result)
źródło
Używając junit4 i Hamcrest , otrzymujesz zwięzłą metodę porównywania tablic. Zawiera również szczegółowe informacje o tym, gdzie błąd znajduje się w śledzeniu awarii.
Wyjście śledzenia awarii:
źródło
Wiem, że pytanie dotyczy JUnit4, ale jeśli utkniesz w JUnit3, możesz utworzyć krótką funkcję narzędzia, taką jak ta:
W JUnit3 jest to lepsze niż bezpośrednie porównywanie tablic, ponieważ szczegółowo określa, które elementy są różne.
źródło