La réponse de Tomasz Nurkiewicz ne semble pas raconter toute l'histoire!
NB Mockito version: 1.10.19.
Je suis vraiment un newb Mockito, donc je ne peux pas expliquer le comportement suivant: s'il y a un expert qui peut améliorer cette réponse, n'hésitez pas.
La méthode en question ici getContentStringValue
, n'est PAS final
et NON static
.
Cette ligne fait appel à la méthode originale getContentStringValue
:
doReturn( "dummy" ).when( im ).getContentStringValue( anyInt(), isA( ScoreDoc.class ));
Cette ligne n'appelle pas la méthode d'origine getContentStringValue
:
doReturn( "dummy" ).when( im ).getContentStringValue( anyInt(), any( ScoreDoc.class ));
Pour des raisons auxquelles je ne peux pas répondre, l'utilisation isA()
entraîne l' doReturn
échec du comportement (?) "Ne pas appeler la méthode" prévu .
Regardons les signatures de méthode impliquées ici: ce sont les deux static
méthodes de Matchers
. Le Javadoc dit que les deux sont de retour null
, ce qui est un peu difficile à comprendre. Vraisemblablement l' Class
objet passé comme paramètre est examiné mais le résultat n'a jamais été calculé ou rejeté. Étant donné que cela null
peut représenter n'importe quelle classe et que vous espérez que la méthode simulée ne sera pas appelée, les signatures isA( ... )
et le any( ... )
retour ne pourraient-ils pas être renvoyés null
plutôt qu'un paramètre générique * <T>
?
En tous cas:
public static <T> T isA(java.lang.Class<T> clazz)
public static <T> T any(java.lang.Class<T> clazz)
La documentation de l'API ne donne aucun indice à ce sujet. Il semble également que la nécessité d'un tel comportement "ne pas appeler la méthode" soit "très rare". Personnellement, j'utilise cette technique tout le temps : en général, je trouve que la moquerie implique quelques lignes qui "définissent la scène" ... suivies par l'appel d'une méthode qui "reproduit" ensuite la scène dans le contexte simulé que vous avez mis en scène .. .et pendant que vous installez le décor et les accessoires, la dernière chose que vous voulez, c'est que les acteurs entrent à gauche et commencent à jouer leur cœur ...
Mais c'est bien au-delà de ma note salariale ... J'invite des explications de tous les grands prêtres Mockito de passage ...
* "paramètre générique" est-il le bon terme?