apakah mungkin untuk melewati jenis antarmuka dengan obat generik?
Antarmuka:
public interface AsyncCallback<T>
Saya test metode:
Mockito.any(AsyncCallback.class)
Menempatkan <ResponseX>
di belakang atau .kelas
tidak bekerja.
Ada jenis-cara yang aman: gunakan ArgumentMatchers.setiap()
dan memenuhi syarat dengan tipe:
ArgumentMatchers.<AsyncCallback<ResponseX>>any()
sebagai pierrefevrier disebutkan di komentar, dengan versi baru dari Mockito itu's
Matchers.<AsyncCallback<ResponseX>>any()
Menggunakan Java 8, anda hanya dapat menggunakan setiap()
(dengan asumsi statis impor) tanpa argumen atau parameter jenis karena peningkatan jenis inferensi. Compiler sekarang tahu dari target jenis (jenis metode argumen) yang anda benar-benar berarti Pencocokan.<AsyncCallback<ResponseX>>setiap()
, yang merupakan pra-Jawa 8 solusi.
Aku harus mengadopsi berikut mechamism untuk memungkinkan untuk obat generik:
import static org.mockito.Matchers.any;
List<String> list = any();
when(callMyMethod.getResult(list)).thenReturn(myResultString);
Semoga ini bisa membantu seseorang.
Selanjutnya untuk thSoft's jawaban menempatkan memenuhi syarat panggilan untuk setiap() dalam metode berarti aku bisa menghapus kualifikasi sejak kembali jenis diperbolehkan kesimpulan:
private HashMap<String, String> anyStringStringHashMap() {
return Matchers.any();
}
Anda hanya dapat membuang itu, menambahkan menekan peringatan jika anda seperti:
@SuppressWarnings("unchecked")
AsyncCallback<ResponseX> callback = Mockito.any(AsyncCallback.class)
Jika diperbolehkan Jawa 'generic' obat generik mereka bisa memiliki metode seperti ini yang adalah apa yang anda cari
private static <T, E> T<E> mock(Class<T<E>> clazz)