W przypadku Mockito chcę verify()
wywołać metodę z byte[]
listy argumentów, ale nie znalazłem sposobu na napisanie tego.
myMethod( byte[] )
Chcę tylko coś takiego anyByteArray()
, jak to zrobić z Mockito?
W przypadku Mockito chcę verify()
wywołać metodę z byte[]
listy argumentów, ale nie znalazłem sposobu na napisanie tego.
myMethod( byte[] )
Chcę tylko coś takiego anyByteArray()
, jak to zrobić z Mockito?
Odpowiedzi:
spróbowałbym any(byte[].class)
AdditionalMatchers.aryEq(expectedArray)
Spróbuj tego:
AdditionalMatchers.aryEq(array);
Wolałbym użyć Matchers.<byte[]>any()
. To zadziałało dla mnie.
Zgadzam się z Mutanos i Alecio. Ponadto można sprawdzić jak najwięcej identycznych wywołań metod (weryfikacja 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 }));
Możesz użyć Mockito.any (), gdy argumenty są również tablicami. Użyłem tego w ten sposób:
verify(myMock, times(0)).setContents(any(), any());
To, co dla mnie działa, było org.mockito.ArgumentMatchers.isA
na przykład:
isA(long[].class)
to działa dobrze.
różnica między sobą wynosi:
public static <T> T any(Class<T> type) {
reportMatcher(new VarArgAware(type, "<any " + type.getCanonicalName() + ">"));
return Primitives.defaultValue(type);
}
public static <T> T isA(Class<T> type) {
reportMatcher(new InstanceOf(type));
return Primitives.defaultValue(type);
}
Zawsze możesz utworzyć niestandardowy Matcher za pomocą argThat
Mockito.verify(yourMockHere).methodCallToBeVerifiedOnYourMockHere(ArgumentMatchers.argThat(new ArgumentMatcher<Object>() {
@Override
public boolean matches(Object argument) {
YourTypeHere[] yourArray = (YourTypeHere[]) argument;
// Do whatever you like, here is an example:
if (!yourArray[0].getStringValue().equals("first_arr_val")) {
return false;
}
return true;
}
}));