Mockito menawarkan:
when(mock.process(Matchers.any(List.class)));
Bagaimana cara menghindari peringatan jika process
mengambil List<Bar>
alih?
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)));
anyListOf
. MeskipunanyList
berfungsi, itu memancarkan peringatan.anyListOf
sudah 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>
danList<DTO>
saya telah memecahkan masalah ini menggunakanArgumentMatchers
dengan generik:when(adapter.adapt(ArgumentMatchers.<DTO>anyList())).thenCallRealMethod();
Selain di
anyListOf
atas, Anda selalu dapat menentukan obat generik secara eksplisit menggunakan sintaks ini:Java 8 yang baru memungkinkan inferensi tipe berdasarkan pada parameter, jadi jika Anda menggunakan Java 8, ini bisa berfungsi juga:
Ingatlah bahwa tidak ada
any()
atau tidakanyList()
akan berlaku cek, termasuk ketik atau cek kosong. Dalam Mockito 2.x,any(Foo.class)
diubah menjadi "anyinstanceof
Foo", tetapiany()
masih berarti "semua nilai termasuknull
".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 digunakanorg.mockito.Matchers
seperti di atas.sumber
Matchers.any()
sangat nyaman!Sebelum Java 8 (versi 7 atau 6) saya menggunakan metode baru ArgumentMatchers.anyList:
sumber