Die Antwort von Tomasz Nurkiewicz scheint nicht die ganze Geschichte zu erzählen!
NB Mockito Version: 1.10.19.
Ich bin ein absoluter Mockito-Neuling und kann mir das folgende Verhalten nicht erklären. Wenn es einen Experten gibt, der diese Antwort verbessern kann, bitte ich um Verständnis.
Die Methode, um die es hier geht, getContentStringValue
ist NICHT final
y NICHT static
.
Diese Linie hace die ursprüngliche Methode aufrufen getContentStringValue
:
doReturn( "dummy" ).when( im ).getContentStringValue( anyInt(), isA( ScoreDoc.class ));
Diese Linie nicht die ursprüngliche Methode aufrufen getContentStringValue
:
doReturn( "dummy" ).when( im ).getContentStringValue( anyInt(), any( ScoreDoc.class ));
Aus Gründen, die ich nicht beantworten kann, ist die Verwendung von isA()
bewirkt das beabsichtigte (?) "Methode nicht aufrufen"-Verhalten von doReturn
zu scheitern.
Schauen wir uns die beteiligten Methodensignaturen an: Sie sind beide static
Methoden der Matchers
. Beide geben laut Javadoc Folgendes zurück null
was an sich schon ein wenig schwierig zu verstehen ist. Vermutlich ist die Class
Objekt, das als Parameter übergeben wird, wird untersucht, aber das Ergebnis entweder nie berechnet oder verworfen. Angesichts der Tatsache, dass null
für eine beliebige Klasse stehen kann und dass Sie hoffen, dass die verspottete Methode nicht aufgerufen wird, könnten nicht die Signaturen von isA( ... )
y any( ... )
einfache Rückkehr null
und nicht ein allgemeiner Parameter* <T>
?
Wie auch immer:
public static <T> T isA(java.lang.Class<T> clazz)
public static <T> T any(java.lang.Class<T> clazz)
In der API-Dokumentation finden sich dazu keine Anhaltspunkte. Sie scheint auch zu sagen, dass die Notwendigkeit für ein solches Verhalten "Methode nicht aufrufen" "sehr selten" ist. Persönlich verwende ich diese Technik die ganze Zeit Typischerweise finde ich, dass Spott ein paar Zeilen beinhaltet, die "die Szene festlegen" ... gefolgt vom Aufruf einer Methode, die dann die Szene in dem von Ihnen inszenierten Scheinkontext "abspielt" ... und während Sie die Szenerie und die Requisiten aufbauen, 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 Gehaltsklasse hinaus... Ich bitte um Erklärungen von allen vorbeikommenden Mockito-Hochpriestern...
* Ist "allgemeiner Parameter" der richtige Begriff?