2012-04-08 12 views
164

Z Mockito, chcę verify() wywołanie metody z byte[] w swojej liście argumentów, ale nie znalazłem jak to napisać.Mockito matcher i tablica prymitywów

myMethod(byte[]) 

Chcę tylko coś anyByteArray(), jak to zrobić z Mockito?

+0

Czy naprawdę nie obchodzi cię zawartość zawartości tablicy bajtów? Widzę to wiele w testowaniu jednostkowym, gdzie ludzie używają dopasowań anyX(), ponieważ są wygodne, ale realistycznie prawie zawsze powinniście się przejmować tym, co jest przekazywane. Jeśli nie używacie odpowiedzi, która faktycznie pochłania wartość, prawdopodobnie powinieneś dopasować się do rzeczywistego spodziewanego argumentu. – Matunos

+0

@Matunos: To dyskusyjne. Używanie dowolnych matek może uprościć testy, a następna osoba, która przyjrzy się testowi, nie będzie rozpraszana przez niepotrzebne precyzyjne dopasowanie i może skupić się na faktycznym celu testu. –

+0

@tbruelle: Należy pamiętać, że każda tablica w Javie jest obiektem. To pomogłoby ci na samym początku. –

Odpowiedz

321

chciałbym spróbować any(byte[].class)

+0

Oups Tęskniłem za tym, dzięki! – tbruyelle

+30

Jeśli chcesz zweryfikować konkretny bajt [], możesz użyć 'AdditionalMatchers.aryEq (expectedArray)' –

+4

lub Matchers. dowolne(). – jbyler

1

Or ..

byte[] sampleTextFileAsBytes = new byte[]{anyByte()}; 
20

Spróbuj tego:

AdditionalMatchers.aryEq(array); 
8

wolałbym użyć Matchers.<byte[]>any(). To działało dla mnie.

6

Zgadzam się z Mutanos i Alecio. Ponadto można sprawdzić jak najwięcej identycznych wywołań metod (sprawdzanie kolejnych wywołań w kodzie produkcyjnym, kolejność weryfikacji nie ma znaczenia). Oto kod:

import static org.mockito.AdditionalMatchers.*; 

    verify(mockObject).myMethod(aryEq(new byte[] { 0 })); 
    verify(mockObject).myMethod(aryEq(new byte[] { 1, 2 })); 
0

Można użyć Mockito.any(), gdy argumenty są również tablice. użyłem go tak:

verify(myMock, times(0)).setContents(any(), any());