Jawaban:
Ada cara yang aman untuk mengetik: gunakan ArgumentMatchers.any()dan beri kualifikasi dengan jenisnya:
ArgumentMatchers.<AsyncCallback<ResponseX>>any()
(Matchers.<AsyncCallback<ResponseX>>any()
Matcherssebenarnya sudah usang, tetapi ArgumentMatchersberhasil.
Menggunakan Java 8, Anda cukup menggunakan any()(dengan asumsi impor statis) tanpa parameter argumen atau tipe karena inferensi tipe yang ditingkatkan. Kompiler sekarang tahu dari tipe target (tipe argumen metode) yang sebenarnya Anda maksud Matchers.<AsyncCallback<ResponseX>>any(), yang merupakan solusi pra-Java 8.
any()cocok AsyncCallback<AnyOtherType>juga?
AsyncCallback<AnyOtherType>bahkan tidak harus mengkompilasi jika tipe argumen adalah 'AsyncCallback <ResponseX>'.
when(x.y(any())).thenAnswer(...)misalnya, di mana yadalah public <T> T y(AsyncCallback<T> arg). Mungkin akan lebih baik untuk memeriksa jenis jawaban, jika itu yang dibutuhkan?
isA(). Jika objek memegang Classobjek yang sesuai dengan jenisnya, dan antarmuka mengekspos ini, saya kira Anda bisa memeriksanya di pencocokan kustom. Atau misalnya dalam kasus CollectionAnda dapat memeriksa jenis elemen.
Matchersdigantikan oleh ArgumentMatchersdi Mockito v2
Saya harus mengadopsi mekanisme berikut untuk memungkinkan obat generik:
import static org.mockito.Matchers.any;
List<String> list = any();
when(callMyMethod.getResult(list)).thenReturn(myResultString);
Semoga ini bisa membantu seseorang.
Posting komentar pierrefevrier sebagai jawaban yang mungkin berguna jika ada dalam jawaban, bukan komentar.
Dengan versi baru Mockito: (Matchers.<AsyncCallback<ResponseX>>any()
Anda bisa melemparkannya, menambahkan peringatan penekan jika Anda suka:
@SuppressWarnings("unchecked")
AsyncCallback<ResponseX> callback = Mockito.any(AsyncCallback.class)
Jika Java memperbolehkan generik 'generik' mereka dapat memiliki metode seperti ini yang Anda cari
private static <T, E> T<E> mock(Class<T<E>> clazz)
You cannot use argument matchers outside of verification or stubbing.
@SuppressWarnings: pra-java 8, jika Anda akan menetapkannya ke variabel yang terpisah, Anda bisa menggunakannya any()seperti pada jawaban theINtoy. Sekarang dengan java 8, any()dapat digunakan inline tanpa perlu tugas yang terpisah.
Saya punya masalah serupa menggunakan Spring Example:
Mockito.when(repo.findAll(Mockito.<Example<SrvReqToSupplierComment>>any()))
.thenReturn(Lists.emptyList());
Di sini, Anda harus menggunakan kualifikasi, b / c metode findAll dapat mengambil beberapa jenis, seperti Sortdan Iterable. Anda juga dapat menggunakan Mockito.any(Example.class)tentu saja dengan jenis peringatan keselamatan.