За допомогою Mockito я хочу verify()
викликати метод byte[]
у своєму списку аргументів, але я не знайшов, як це написати.
myMethod( byte[] )
Я просто хочу щось подібне anyByteArray()
, як це зробити з Mockito?
За допомогою Mockito я хочу verify()
викликати метод byte[]
у своєму списку аргументів, але я не знайшов, як це написати.
myMethod( byte[] )
Я просто хочу щось подібне anyByteArray()
, як це зробити з Mockito?
Відповіді:
Я б спробував any(byte[].class)
AdditionalMatchers.aryEq(expectedArray)
Спробуйте це:
AdditionalMatchers.aryEq(array);
Я вважаю за краще використовувати Matchers.<byte[]>any()
. Це працювало для мене.
Я згоден з Мутаносом і Алесіо. Крім того, можна перевірити якомога більше однакових викликів методів (перевірка подальших викликів у виробничому коді, порядок верифікації не має значення). Ось код:
import static org.mockito.AdditionalMatchers.*;
verify(mockObject).myMethod(aryEq(new byte[] { 0 }));
verify(mockObject).myMethod(aryEq(new byte[] { 1, 2 }));
Ви можете використовувати Mockito.any (), коли аргументи також є масивами. Я використовував це так:
verify(myMock, times(0)).setContents(any(), any());
Що для мене працювало org.mockito.ArgumentMatchers.isA
наприклад:
isA(long[].class)
це добре працює.
різниця в реалізації один одного:
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);
}
Ви завжди можете створити спеціальний Matcher, використовуючи 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;
}
}));