Разница между Mockito @Spy и @Mock(ответ = ответы.ВЫЗЫВАЕТ РЕАЛЬНЫЕ МЕТОДЫ)

в чем разница между этими двумя объявлениями в mockito?

    @Mock(answer = Answers.CALLS_REAL_METHODS)
    ArrayList<String> mock;

    @Spy
    ArrayList<String> spy;

1 ответов


прежний стиль CALLS_REAL_METHODS создает неинициализированный объект; конструкторы не запускаются и поля не задаются. Обычно этот синтаксис небезопасен, так как реальные реализации будут взаимодействовать с неинициализированными полями, которые могут представлять собой недопустимое или невозможное состояние.

последний стиль @Spy позволяет вам вызывать конструктор по вашему выбору, или Mockito будет попробуйте вызвать конструктор no-arg, если поле неинициализировано. Затем поля копируются в сгенерированный Шпион (который расширяет шпионский тип), позволяя гораздо более безопасные и реалистичные взаимодействия.


требуемое напоминание: на самом деле не издевайтесь над коллекциями Java за пределами примеров игрушек и не забудьте использовать doReturn синтаксис при переопределении шпионов и CALLS_REAL_METHOD издевается, иначе вы вызовете реальный метод в when звонок.