Karena Java 8 Anda dapat menggunakan metode argumen-kurang anydan argumen tipe akan disimpulkan oleh kompiler:
verify(bar).doStuff(any());
Penjelasan
Hal baru di Java 8 adalah bahwa tipe target ekspresi akan digunakan untuk menyimpulkan parameter tipe sub-ekspresi. Sebelum Java 8 hanya argumen untuk metode yang digunakan untuk tipe inferensi parameter (sebagian besar waktu).
Dalam hal ini tipe parameter doStuffakan menjadi tipe target untuk any(), dan tipe nilai pengembalian any()akan dipilih untuk mencocokkan tipe argumen itu.
Mekanisme ini ditambahkan di Java 8 terutama untuk dapat mengkompilasi ekspresi lambda, tetapi umumnya meningkatkan inferensi tipe.
Tipe primitif
Sayangnya, ini tidak berfungsi dengan tipe primitif:
public interface IBar {
void doPrimitiveStuff(int i);
}
verify(bar).doPrimitiveStuff(any()); // Compiles but throws NullPointerException
verify(bar).doPrimitiveStuff(anyInt()); // This is what you have to do instead
Masalahnya adalah bahwa kompiler akan menyimpulkan Integersebagai nilai balik dari any(). Mockito tidak akan mengetahui hal ini (karena tipe penghapusan) dan mengembalikan nilai default untuk tipe referensi, yaitu null. Runtime akan mencoba untuk membuka kotak nilai kembali dengan memanggil intValuemetode di atasnya sebelum meneruskannya doStuff, dan pengecualian dilemparkan.
anymetode ini seharusnya hanya bekerja. Anda tidak mencari jawaban untuk hal-hal yang hanya berfungsi!