Mockito menawarkan:
when(mock.process(Matchers.any(List.class)));
Bagaimana cara menghindari peringatan jika processmengambil List<Bar>alih?
Mockito menawarkan:
when(mock.process(Matchers.any(List.class)));
Bagaimana cara menghindari peringatan jika processmengambil List<Bar>alih?
Jawaban:
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. Meskipun anyListberfungsi, itu memancarkan peringatan.
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();
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.
Matchers.any()sangat nyaman!
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());