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, getContentStringValue
olduğ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 doReturn
başarısız olmasına neden olur.
Yöntem imzalar at atalım burada yer: ikisi de vardır static
yö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 Class
parametre olarak iletilen nesne incelenir, ancak sonuç asla hesaplanmaz veya atılmaz. Olduğu göz önüne alındığında null
herhangi 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üş null
jenerik 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?