В настоящее время я нахожусь в процессе использования Mockito для имитации объектов моего сервисного уровня в приложении Spring MVC, в котором я хочу протестировать методы Controller. Однако, как я читал о специфике Mockito, я обнаружил, что методы doReturn(...).when(...)
эквивалентны when(...).thenReturn(...)
. Итак, мой вопрос: какой смысл иметь два метода, которые делают одно и то же, или в чем тонкая разница между doReturn(...).when(...)
и when(...).thenReturn(...)
?
Любая помощь будет оценена.
java
unit-testing
mockito
черная пантера
источник
источник
doReturn()
это полезно.Ответы:
Два синтаксиса для заглушки примерно эквивалентны. Тем не менее, вы всегда можете использовать
doReturn/when
для заглушки; но есть случаи, когда вы не можете использоватьwhen/thenReturn
. Скопирование пустых методов является одним из таких. Другие включают использование со шпионами Мокито, и повторение одного и того же метода более одного раза.Одна вещь, которая
when/thenReturn
дает вам,doReturn/when
но не дает, это проверка типа возвращаемого вами значения во время компиляции. Тем не менее, я считаю, что это почти не имеет значения - если вы ошиблись в типе, вы узнаете, как только запустите тест.Я настоятельно рекомендую только использовать
doReturn/when
. Нет смысла изучать два синтаксиса, когда один подойдет.Возможно, вы захотите сослаться на мой ответ в « Формирование грамматики» Мокито - более подробный ответ на очень тесно связанный вопрос.
источник
doReturn/when
и провожу следующие несколько минут, выясняя, что пошло не так. Проверка типа компиляции становится чрезвычайно полезнойwhen/thenReturn
.when/thenReturn
вместоdoReturn/when
.doReturn/when
представляет собой компромисс. Команда не рекомендует так или иначе, но отмечает, что этотwhen/then
подход более интуитивен, более читабелен и предлагает проверку времени компиляции, именно этот подход сделал Mockito популярным и простым в использовании, не забывайте, что когда база кода используется совместно различные навыки в вашей команде; все же у этого есть недостатки относительно шпионов и недействительных методов.doReturn()
имеет большой недостаток - превращение в кодирование вызовов методов в стиле YODA. Вещество позже записывается первым. Большинство людей читают слева направо; так что теперь вы должны постоянно помнить, чтобы изменить логику возврата, когда в вашей голове.