Die Antwort von Tomasz Nurkiewicz scheint nicht die ganze Geschichte zu erzählen!
NB Mockito-Version: 1.10.19.
Ich bin ein Mockito-Neuling und kann daher das folgende Verhalten nicht erklären: Wenn es einen Experten gibt, der diese Antwort verbessern kann, fühlen Sie sich bitte frei.
Die hier fragliche Methode getContentStringValue
ist NICHT final
und NICHT static
.
Diese Linie hat die ursprüngliche Methode aufrufen getContentStringValue
:
doReturn( "dummy" ).when( im ).getContentStringValue( anyInt(), isA( ScoreDoc.class ));
Diese Zeile ruft nicht die ursprüngliche Methode auf getContentStringValue
:
doReturn( "dummy" ).when( im ).getContentStringValue( anyInt(), any( ScoreDoc.class ));
Aus Gründen, die ich nicht beantworten kann, isA()
führt die Verwendung dazu , dass das beabsichtigte (?) Verhalten "Methode nicht aufrufen" doReturn
fehlschlägt.
Schauen wir uns die hier beteiligten Methodensignaturen an: Sie sind beide static
Methoden von Matchers
. Beide werden vom Javadoc zur Rückkehr aufgefordert null
, was ein wenig schwierig ist, den Kopf in sich selbst zu bekommen. Vermutlich Class
wird das als Parameter übergebene Objekt untersucht, das Ergebnis jedoch nie berechnet oder verworfen. Da null
dies für jede Klasse stehen kann und Sie hoffen, dass die verspottete Methode nicht aufgerufen wird, könnten die Signaturen von isA( ... )
und nicht any( ... )
nur null
einen generischen Parameter * zurückgeben <T>
?
Wie auch immer:
public static <T> T isA(java.lang.Class<T> clazz)
public static <T> T any(java.lang.Class<T> clazz)
Die API-Dokumentation gibt keinen Hinweis darauf. Es scheint auch zu sagen, dass die Notwendigkeit eines solchen Verhaltens "Methode nicht aufrufen" "sehr selten" ist. Persönlich verwende ich diese Technik die ganze Zeit : Normalerweise stelle ich fest, dass das Verspotten einige Zeilen umfasst, die "die Szene setzen" ... gefolgt vom Aufrufen einer Methode, die dann die Szene in dem von Ihnen inszenierten Scheinkontext "ausspielt". . und während Sie die Szenerie und die Requisiten einrichten, ist das Letzte, was Sie wollen, dass die Schauspieler die Bühne links betreten und anfangen, ihre Herzen zu spielen ...
Aber das geht weit über meine Gehaltsstufe hinaus ... Ich lade alle vorbeikommenden Mockito-Hohepriester zu Erklärungen ein ...
* Ist "generischer Parameter" der richtige Begriff?