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?


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)


34
Jika Anda ingin memverifikasi byte tertentu [], Anda dapat menggunakanAdditionalMatchers.aryEq(expectedArray)
John Oxley

5
Atau Pencocokan. <Byte []> any ().
jbyler


12

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


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


0

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

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

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

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

Menulis korek api kustom, ketika Mockito mampu menangani kasus penggunaan ini hanya menambah utang teknis.
linuxdan
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.