La risposta di Tomasz Nurkiewicz sembra non raccontare l'intera storia!
NB versione Mockito: 1.10.19.
Sono un principiante di Mockito, quindi non posso spiegare il seguente comportamento: se c'è un esperto là fuori che può migliorare questa risposta, non esitate.
Il metodo in questione qui, NONgetContentStringValue
è e NON . final
static
Questa linea fa chiamare il metodo originale getContentStringValue
:
doReturn( "dummy" ).when( im ).getContentStringValue( anyInt(), isA( ScoreDoc.class ));
Questa linea non chiama il metodo originale getContentStringValue
:
doReturn( "dummy" ).when( im ).getContentStringValue( anyInt(), any( ScoreDoc.class ));
Per motivi ai quali non posso rispondere, l'utilizzo isA()
causa il doReturn
fallimento del comportamento previsto (?) "Non chiamare metodo" .
Diamo un'occhiata alle firme dei metodi coinvolti qui: sono entrambi static
metodi di Matchers
. Il Javadoc dice che entrambi ritornano null
, il che è un po 'difficile da mettere in testa da soli. Presumibilmente l' Class
oggetto passato mentre il parametro viene esaminato ma il risultato non viene mai calcolato o scartato. Dato che null
può rappresentare qualsiasi classe e che speri che il metodo deriso non venga chiamato, le firme di isA( ... )
e any( ... )
semplicemente restituiscono null
piuttosto che un parametro generico * <T>
?
Comunque:
public static <T> T isA(java.lang.Class<T> clazz)
public static <T> T any(java.lang.Class<T> clazz)
La documentazione dell'API non fornisce alcun indizio al riguardo. Sembra anche che la necessità di tale comportamento "non chiamare metodo" sia "molto rara". Personalmente io uso questa tecnica per tutto il tempo : in genere trovo che beffarda coinvolge poche righe che "fissano la scena" ... seguito chiamando un metodo che poi "gioca" la scena nel contesto finta che avete messo in scena .. e mentre stai allestendo lo scenario e gli oggetti di scena, l'ultima cosa che vuoi è che gli attori entrino sul palco a sinistra e inizino a recitare il loro cuore ...
Ma questo va ben oltre il mio voto ... Invito spiegazioni da qualsiasi sommo sacerdote Mockito di passaggio ...
* è "parametro generico" il termine giusto?