Відповідь Томаша Нуркевича, здається, не розповідає всієї історії!
NB Версія Мокіто: 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 не дає жодної підказки про це. Також, здається, йдеться про необхідність такої поведінки "не називати метод", "дуже рідко". Особисто я весь час використовую цю техніку : зазвичай я вважаю, що глузування включає кілька рядків, які "задають сцену" ... з подальшим викликом методу, який потім "розігрує" сцену в макетному контексті, який ви поставили. і поки ви налаштовуєте декорації та реквізити, останнє, що вам потрібно, це актори вийти на сцену ліворуч і почати виконувати свої думки ...
Але це набагато перевищує мій рівень оплати ... Я пропоную пояснення будь-яким першосвященикам Мокіто ...
* це "загальний параметр" правильний термін?