Tomasz Nurkiewicz'in cevabı tüm hikayeyi anlatmıyor gibi görünüyor!
NB Mockito sürümü: 1.10.19.
Ben çok Mockito'lu bir yeniyim, bu yüzden aşağıdaki davranışı açıklayamıyorum: bu cevabı geliştirebilecek bir uzman varsa, lütfen çekinmeyin.
Burada söz konusu olan yöntem, getContentStringValueolduğu DEĞİL final ve DEĞİL static .
Bu hat yapar orijinal yöntemini çağırın getContentStringValue:
doReturn( "dummy" ).when( im ).getContentStringValue( anyInt(), isA( ScoreDoc.class ));
Bu hat gelmez orijinal yöntemini çağırın getContentStringValue:
doReturn( "dummy" ).when( im ).getContentStringValue( anyInt(), any( ScoreDoc.class ));
Yanıtlayamadığım nedenlerden dolayı isA(), amaçlanan (?) "Yöntemi çağırmayın" davranışının doReturnbaşarısız olmasına neden olur.
Yöntem imzalar at atalım burada yer: ikisi de vardır staticyöntemleri Matchers. Her ikisi de Javadoc tarafından geri dönmek için söyleniyor null, ki bu da başınızı kendi içinde döndürmek biraz zor. Muhtemelen Classparametre olarak iletilen nesne incelenir, ancak sonuç asla hesaplanmaz veya atılmaz. Olduğu göz önüne alındığında nullherhangi bir sınıf için duramaz ve imzaları, çağrılacak değil alay yöntem için umuyordum olmadığını isA( ... )ve any( ... )sadece dönüş nulljenerik parametresi yerine * <T>?
Neyse:
public static <T> T isA(java.lang.Class<T> clazz)
public static <T> T any(java.lang.Class<T> clazz)
API belgeleri bu konuda herhangi bir ipucu vermez. Ayrıca, bu tür "yöntem çağırma" davranışına duyulan ihtiyacın "çok nadir" olduğu da anlaşılmaktadır. Şahsen ben bu tekniği her zaman kullanıyorum : tipik olarak alaycı "sahneyi ayarlamak" birkaç satır içerir bulmak ... daha sonra sahnelemek sahte bağlamında sahneyi "oynar" bir yöntem çağırdıktan sonra .. sahne ve sahne kurarken istediğiniz son şey oyuncuların sahneye sola girip kalplerini dışarı atmaya başlaması ...
Ama bu maaş notumun çok ötesinde ... Geçen Mockito papazlarının açıklamalarına davet ediyorum ...
* "jenerik parametre" doğru terim mi?