Jawaban:
Ada cara yang aman untuk mengetik: gunakan ArgumentMatchers.any()
dan beri kualifikasi dengan jenisnya:
ArgumentMatchers.<AsyncCallback<ResponseX>>any()
(Matchers.<AsyncCallback<ResponseX>>any()
Matchers
sebenarnya sudah usang, tetapi ArgumentMatchers
berhasil.
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 y
adalah public <T> T y(AsyncCallback<T> arg)
. Mungkin akan lebih baik untuk memeriksa jenis jawaban, jika itu yang dibutuhkan?
isA()
. Jika objek memegang Class
objek yang sesuai dengan jenisnya, dan antarmuka mengekspos ini, saya kira Anda bisa memeriksanya di pencocokan kustom. Atau misalnya dalam kasus Collection
Anda dapat memeriksa jenis elemen.
Matchers
digantikan oleh ArgumentMatchers
di 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 Sort
dan Iterable
. Anda juga dapat menggunakan Mockito.any(Example.class)
tentu saja dengan jenis peringatan keselamatan.