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 final
i 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” doReturn
nie powiodło się.
Spójrzmy na użyte tutaj podpisy metod: obie są static
metodami Matchers
. Obaj mówią Javadoc o powrocie null
, co jest trochę trudne do opanowania w sobie. Prawdopodobnie Class
obiekt 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ę null
zamiast 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?