Mockito: Daftar Pencocokan dengan obat generik


Jawaban:


279

Untuk Java 8 dan di atasnya, mudah:

when(mock.process(Matchers.anyList()));

Untuk Java 7 dan di bawahnya, kompiler memerlukan sedikit bantuan. Gunakan anyListOf(Class<T> clazz):

when(mock.process(Matchers.anyListOf(Bar.class)));

16
Catatan: ini sudah usang di Mockito 2. * dan akan dihapus di Mockito 3. Sudah usang karena kompiler Java 8 dapat menyimpulkan jenisnya sekarang.
Kip

@artbristol apakah Anda tahu jika dengan anySet () harus berfungsi sama seperti anyList ()? Saya di Java 8 dan peringatan dilemparkan di Eclipse IDE
Fernando Fradegrada

1
Lebih baik digunakan anyListOf. Meskipun anyListberfungsi, itu memancarkan peringatan.
balki

3
anyListOfsudah usang, jadi lebih baik untuk tidak menggunakannya. Contoh untuk Java 8 tidak berfungsi jika metode overload, misalnya jika Anda memiliki metode yang menerima 2 daftar berbeda: List<DBEntity>dan List<DTO>saya telah memecahkan masalah ini menggunakan ArgumentMatchersdengan generik:when(adapter.adapt(ArgumentMatchers.<DTO>anyList())).thenCallRealMethod();
edufinn

14

Selain di anyListOfatas, Anda selalu dapat menentukan obat generik secara eksplisit menggunakan sintaks ini:

when(mock.process(Matchers.<List<Bar>>any(List.class)));

Java 8 yang baru memungkinkan inferensi tipe berdasarkan pada parameter, jadi jika Anda menggunakan Java 8, ini bisa berfungsi juga:

when(mock.process(Matchers.any()));

Ingatlah bahwa tidak ada any()atau tidak anyList()akan berlaku cek, termasuk ketik atau cek kosong. Dalam Mockito 2.x, any(Foo.class)diubah menjadi "any instanceofFoo", tetapi any()masih berarti "semua nilai termasuk null".

CATATAN: Di atas telah beralih ke ArgumentMatchers di versi Mockito yang lebih baru, untuk menghindari tabrakan nama dengan org.hamcrest.Matchers. Versi Mockito yang lebih lama harus tetap digunakan org.mockito.Matchersseperti di atas.


4
Matchers.any()sangat nyaman!
MB setiap

Pencocokan sekarang sudah tidak digunakan lagi, inilah info dari mockito "Gunakan ArgumentMatchers. Kelas ini sekarang sudah tidak digunakan lagi untuk menghindari bentrokan nama dengan kelas Hamcrest org.hamcrest.Matchers. Kelas ini kemungkinan akan dihapus dalam versi 3.0." static.javadoc.io/org.mockito/mockito-core/2.7.21/org/mockito/…
oddmeter

@oddmeter Perubahan dibuat.
Jeff Bowman

5

Sebelum Java 8 (versi 7 atau 6) saya menggunakan metode baru ArgumentMatchers.anyList:

import static org.mockito.Mockito.*;
import org.mockito.ArgumentMatchers;

verify(mock, atLeastOnce()).process(ArgumentMatchers.<Bar>anyList());
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.