Кажется, что ответ Томаша Нуркевича не рассказывает всей истории!
NB Mockito версия: 1.10.19.
Я очень новичок в Mockito, поэтому не могу объяснить следующее поведение: если есть эксперт, который может улучшить этот ответ, пожалуйста, не стесняйтесь.
Метод здесь идет речь, getContentStringValue
является НЕ final
и НЕ static
.
Эта строка делает вызвать оригинальный метод getContentStringValue
:
doReturn( "dummy" ).when( im ).getContentStringValue( anyInt(), isA( ScoreDoc.class ));
Эта строка не вызывает оригинальный метод getContentStringValue
:
doReturn( "dummy" ).when( im ).getContentStringValue( anyInt(), any( ScoreDoc.class ));
По причинам, на которые я не могу ответить, использование isA()
приводит к тому, что предполагаемое (?) Поведение «не вызывать метод» приводит doReturn
к сбою.
Давайте посмотрим на сигнатуры методов, задействованных здесь: они оба являются static
методами Matchers
. Оба говорят, что Javadoc возвращаются null
, что немного трудно заставить себя задуматься. Предположительно Class
объект, переданный в качестве параметра, проверяется, но результат либо никогда не вычисляется, ни отбрасывается. Учитывая, что это null
может означать любой класс, и что вы надеетесь, что смоделированный метод не будет вызван, не могли ли подписи isA( ... )
и any( ... )
просто вернуть, null
а не универсальный параметр * <T>
?
Тем не мение:
public static <T> T isA(java.lang.Class<T> clazz)
public static <T> T any(java.lang.Class<T> clazz)
Документация по API не дает никакой подсказки по этому поводу. Также кажется, что потребность в таком поведении «не вызывать метод» является «очень редкой». Лично я использую эту технику все время : обычно я нахожу, что насмешка включает в себя несколько строк, которые "устанавливают сцену" ... после чего вызывается метод, который затем "проигрывает" сцену в контексте имитации, который вы поставили ... ... и пока вы настраиваете декорации и декорации, последнее, что вам нужно, это чтобы актеры вышли на сцену слева и начали отыгрывать свои сердца ...
Но это намного выше моей зарплаты ... Я приглашаю объяснения от любых проходящих первосвященников Мокито ...
* Является ли "универсальный параметр" правильным термином?