2012-09-19 20 views
7

Właśnie zauważyłem, że jUnit 4.8.1 nie zawiera obsługi testowania dwóch tablic logicznych dla równości. Istnieje mnóstwo innych assertArrayEquals, ale żadna z nich nie przyjmuje dwóch tablic boolowskich.jUnit testowanie dwóch tablic boolowskich

Czy jest to właściwy sposób? Mój obecny myślenia jest to, że będę musiał iteracyjne nad tablicy i użyć czegoś podobnego

Assert.assertTrue(arrayOne[i] == arrayTwo[i]); 

istnieje przejrzysty sposób to zrobić?

+0

Nie, porównuje się odniesienia – Ilya

+2

'assertTrue (Arrays.equals (array1, array2));' –

Odpowiedz

9

Możesz użyć Arrays.equals(), aby porównać dwie tablice, a następnie potwierdzić, że są one równoważne.

Assert.assertTrue(Arrays.equals(arrayOne, arrayTwo)); 

Arrays.equals() sprawdza długość i każdy element tablicy, więc nie trzeba się martwić o iteracji po każdej tablicy.

Istnieje również Assert.assertArrayEquals, który da dokładną pozycję, w której tablice różniły się.

Przykład: W teście pisemnej, takie jak:

@Test 
public void doArrayTest() { 
    int[] foo = {1, 2, 3}; 
    int[] bar = {4, 5, 6}; 
    assertArrayEquals(foo, bar); 
} 

wynik to:

arrays first differed at element [0]; expected:<1> but was:<4> 

Expected :1 
Actual :4 
+0

Perfecto, dzięki! –

+0

Problem polega na tym, że Twoja diagnostyka nie powie Ci, co jest nie tak, jeśli tablice są różne, będziesz musiał wykonać dodatkową pracę, aby dowiedzieć się, dlaczego są one różne – tddmonkey

2

Funkcjonalność został dodany JUnit 4.12, który ukazał się w grudniu 2014

assertArrayEquals(boolean[] expecteds, boolean[] actuals) 
assertArrayEquals(String message, boolean[] expecteds, boolean[] actuals) 

Dla odniesienia: to PR, który zawiera zatwierdzenie: https://github.com/junit-team/junit/pull/632

Powiązane problemy