Mockito匹配器和原语数组

使用Mockito,我想verify()一个方法调用,它的参数列表中有byte[],但我不知道如何写这个。

 myMethod( byte[] )

我只想要类似anyByteArray()的东西,如何用Mockito做到这一点?

181854 次浏览

我会尝试any(byte[].class)

试试这个:

AdditionalMatchers.aryEq(array);

我宁愿使用Matchers.<byte[]>any()。这对我很管用。

我同意Mutanos和Alecio的观点。 此外,可以检查尽可能多的相同方法调用(验证生产代码中的后续调用,验证的顺序无关紧要)。 代码如下:

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());

为此我使用了Matchers.refEq

你总是可以使用argThat创建一个自定义的Matcher

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);
}