Java 8'den beri argümansız any
yöntemi kullanabilirsiniz ve tür argümanı derleyici tarafından çıkarılacaktır:
verify(bar).doStuff(any());
açıklama
Java 8'deki yeni şey , bir ifadenin hedef türünün , alt ifadelerinin tür parametrelerini çıkarmak için kullanılacağıdır. Java 8'den önce yalnızca type parametresi çıkarımı için kullanılan yöntemlerle ilgili argümanlar (çoğu zaman).
Bu durumda, parametre türü doStuff
, hedef tür olacaktır any()
ve dönüş değeri türü, any()
bu bağımsız değişken türüyle eşleşecek şekilde seçilir.
Bu mekanizma, esas olarak lambda ifadelerini derleyebilmek için Java 8'de eklenmiştir, ancak genellikle tür çıkarımlarını geliştirir.
İlkel tipler
Bu ne yazık ki ilkel tiplerle çalışmaz:
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
Sorun derleyici Integer
dönüş değeri olarak çıkarım olacaktır any()
. Mockito bunun farkında olmayacak (tür silme nedeniyle) ve referans türleri için varsayılan değeri döndürecektir null
. Çalışma zamanı, intValue
geçmeden önce üzerinde yöntemi çağırarak dönüş değerini kutudan çıkarmaya çalışır doStuff
ve istisna atılır.
any
Metod sadece işe yarayacağından , Java 8'den beri sorunun çok dikkat çekmeyeceğini tahmin ederdim . Sadece işe yarayan şeyler için cevap aramazsınız!