Mockito匹配器和原始数组

时间:2012-04-08 21:16:32

标签: java mockito

使用Mockito,我希望verify()在其参数列表中使用byte[]进行方法调用,但我没有找到如何编写它。

 myMethod( byte[] )

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

9 个答案:

答案 0 :(得分:378)

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

答案 1 :(得分:25)

试试这个:

AdditionalMatchers.aryEq(array);

答案 2 :(得分:12)

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

答案 3 :(得分:8)

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

import static org.mockito.AdditionalMatchers.*;

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

答案 4 :(得分:0)

或..

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

答案 5 :(得分:0)

当参数也是数组时,您可以使用Mockito.any()。 我这样用过:

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

答案 6 :(得分:0)

我使用了Matchers.refEq

答案 7 :(得分:0)

对我有用的是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);
}

答案 8 :(得分:-1)

您始终可以使用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;
    }
}));