Odpowiedź Tomasza Nurkiewicza wydaje się nie opowiadać całej historii!
Uwaga: wersja Mockito: 1.10.19.
Jestem bardzo nowicjuszem Mockito, więc nie potrafię wyjaśnić następującego zachowania: jeśli istnieje ekspert, który może poprawić tę odpowiedź, nie krępuj się.
Metoda, o której tu mowa getContentStringValue, NIE jest finali NIE static .
Linia ta ma wywołać oryginalną metodę getContentStringValue:
doReturn( "dummy" ).when( im ).getContentStringValue( anyInt(), isA( ScoreDoc.class ));
Ta linia nie wywołuje oryginalnej metody getContentStringValue:
doReturn( "dummy" ).when( im ).getContentStringValue( anyInt(), any( ScoreDoc.class ));
Z powodów, na które nie mogę odpowiedzieć, użycie isA()powoduje, że zamierzone (?) Działanie „nie wywoływać metody” doReturnnie powiodło się.
Spójrzmy na użyte tutaj podpisy metod: obie są staticmetodami Matchers. Obaj mówią Javadoc o powrocie null, co jest trochę trudne do opanowania w sobie. Prawdopodobnie Classobiekt przekazany podczas badania parametru jest badany, ale wynik nigdy nie jest obliczany ani odrzucany. Jeśli się uwzględninull może to oznaczać dowolną klasę i że liczysz na to, że wyśmiewana metoda nie zostanie wywołana, czy podpisy isA( ... )i any( ... )po prostu nie zwrócą się nullzamiast parametru ogólnego * <T>?
Tak czy siak:
public static <T> T isA(java.lang.Class<T> clazz)
public static <T> T any(java.lang.Class<T> clazz)
Dokumentacja API nie daje żadnych wskazówek na ten temat. Wydaje się również, że potrzeba takiego zachowania „nie wywoływać metody” jest „bardzo rzadka”. Ja osobiście używam tej techniki przez cały czas : zazwyczaj uważam, że kpina obejmuje kilka linii, które „ustawiają scenę” ... a następnie wywołuje metodę, która następnie „odtwarza” scenę w symulowanym kontekście, który wystawiłeś… Podczas gdy ustawiasz scenerię i rekwizyty, ostatnią rzeczą, jakiej pragniesz, jest, aby aktorzy weszli na scenę po lewej i zaczęli grać swoje serca ...
Ale to znacznie wykracza poza moją pensję ... Zapraszam wyjaśnienia od wszystkich przechodzących arcykapłanów Mockito ...
* czy „parametr ogólny” jest właściwym terminem?