使用 Mockito,我想verify()
一个参数列表中带有 byte[]
的方法调用,但我没有找到如何编写它。
myMethod( byte[] )
我只想要像anyByteArray()
这样的东西,如何用Mockito做到这一点?
我会尝试any(byte[].class)
试试这个:
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 }));
我为此使用了Matchers.refEq
。
当参数也是数组时,您也可以使用 Mockito.any()。我是这样用的:
verify(myMock, times(0)).setContents(any(), any());
您始终可以使用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;
}
}));
我有用的是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);
}