Предыдущий стиль CALLS_REAL_METHODS создает неинициализированный объект; никакие конструкторы не запускаются и поля не задаются. Как правило, этот синтаксис небезопасен, так как реальные реализации будут взаимодействовать с неинициализированными полями, которые могут составлять недопустимое или невозможное состояние.
Последний стиль @Spy позволяет вам вызвать конструктор по вашему выбору, или Mockito попытается вызвать конструктор no-arg, если поле не инициализировано. Затем поля копируются в сгенерированный Spy (который расширяет тип шпионажа), что позволяет использовать гораздо более безопасные и более реалистичные взаимодействия.
Реквизит напоминание: Не на самом деле дразнить Java коллекции вне игрушечные примеры, и не забудьте использовать doReturn синтаксис при переопределении шпионов и CALLS_REAL_METHOD издевается или иначе вы будете называть реальный метод внутри when это вызов.