Mockitoマッチャーとプリミティブの配列


226

Mockito verify()を使用byte[]して、引数リストにメソッドを呼び出したいのですが、これを書く方法が見つかりませんでした。

 myMethod( byte[] )

私はちょうどのような何かしたいanyByteArray()Mockitoとそれを行う方法を、?


バイト配列の内容が本当に気になりませんか?これはユニットテストでよく見られます。便利なため、anyX()マッチャーを使用しますが、現実的にはほとんどの場合、渡されるものに注意する必要があります。実際に値を消費するAnswerを使用していない場合は、おそらく実際に期待される引数と一致する必要があります。
Matunos、2015

@Matunos:それは議論の余地があります。any-matcherを使用すると、テストが簡単になり、次にテストを見る人が不必要に正確なマッチングによって邪魔されず、テストの実際の目的に集中できます。
Malik Atalla

@tbruelle:Javaのすべての配列はオブジェクトであることを覚えておいてください。それは初めにあなたを助けるでしょう。
Tomasz Przybylski 2016年

回答:


424

やってみる any(byte[].class)


34
特定のバイトを検証したい場合は、[]を使用できますAdditionalMatchers.aryEq(expectedArray)
John Oxley

5
またはMatchers。<byte []> any()。
jbyler 2013年



10

ムタノスとアレシオに同意します。さらに、可能な限り多くの同一のメソッド呼び出しをチェックすることができます(プロダクションコードで後続の呼び出しを検証します。検証の順序は重要ではありません)。これがコードです:

import static org.mockito.AdditionalMatchers.*;

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


0

引数が配列の場合もMockito.any()を使用できます。私はそれを次のように使用しました:

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

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

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

Mockitoがこのユースケースを処理できるときにカスタムマッチャーを作成しても、技術的な負担が増えるだけです。
linuxdan 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.