Pencocokan Mockito dan berbagai primitif

226

Dengan Mockito, saya ingin verify()pemanggilan metode dengan byte[]dalam daftar argumennya, tetapi saya tidak menemukan cara menulis ini.

 myMethod( byte[] )

Saya hanya ingin sesuatu seperti anyByteArray(), bagaimana melakukannya dengan Mockito?

tbruyelle
sumber
Apakah Anda benar-benar tidak peduli apa isi dari byte array? Saya melihat ini banyak dalam pengujian unit, di mana orang-orang menggunakan pencocokan anyX () karena mereka nyaman, tetapi secara realistis Anda hampir selalu harus peduli apa yang diteruskan. Jika Anda tidak menggunakan Jawaban yang benar-benar menghabiskan nilainya, Anda mungkin harus sesuai dengan argumen yang diharapkan sebenarnya.
Matunos
@Matunos: Itu bisa diperdebatkan. Menggunakan pencocokan apa pun dapat membuat tes lebih sederhana dan orang berikutnya yang melihat tes tidak akan terganggu oleh pencocokan tepat yang tidak perlu dan dapat fokus pada tujuan sebenarnya dari tes.
Malik Atalla
@tbruelle: Perlu diingat bahwa setiap array di Jawa adalah objek. Itu akan membantu Anda di awal.
Tomasz Przybylski

Jawaban:

424

aku akan mencoba any(byte[].class)

terima kasih
sumber
34
Jika Anda ingin memverifikasi byte tertentu [], Anda dapat menggunakanAdditionalMatchers.aryEq(expectedArray)
John Oxley
5
Atau Pencocokan. <Byte []> any ().
jbyler
31

Coba ini:

AdditionalMatchers.aryEq(array);
Alécio Carvalho
sumber
12

Saya lebih suka menggunakan Matchers.<byte[]>any(). Ini berhasil untuk saya.

Fabiano Francesconi
sumber
1
Peringatan untuk semua orang: Sekarang sudah usang jadi saya akan memilih jawaban terpilih Mockito.any (byte []. Class)
Chexpir
10

Saya setuju dengan Mutanos dan Alecio. Lebih jauh, seseorang dapat memeriksa sebanyak mungkin panggilan metode identik (memverifikasi panggilan berikutnya dalam kode produksi, urutan verifikasi tidak masalah). Ini kodenya:

import static org.mockito.AdditionalMatchers.*;

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

Saya menggunakan Matchers.refEqini.

Bowofola
sumber
0

Anda dapat menggunakan Mockito.any () saat argumen juga berupa array. Saya menggunakannya seperti ini:

verify(myMock, times(0)).setContents(any(), any());
Crenguta S
sumber
0

Yang berhasil bagi saya adalah org.mockito.ArgumentMatchers.isA

sebagai contoh:

isA(long[].class)

itu bekerja dengan baik.

perbedaan implementasi satu sama lain adalah:

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);
}
Milton Jacomini Neto
sumber
-1

Anda selalu dapat membuat Pencocokan khusus menggunakan 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;
    }
}));
Koray Tugay
sumber
Menulis korek api kustom, ketika Mockito mampu menangani kasus penggunaan ini hanya menambah utang teknis.
linuxdan