Разница между 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
звонок.