Встречается на собеседованиях • сегодня

В чем разница между @Spy и @Mock

`@Mock` создает полностью мок-объект, где все методы по умолчанию возвращают "пустые" значения (null, 0, false и т.д.), если не задано другое поведение через `when().thenReturn()`. `@Spy` создает частичный мок, оборачивая реальный объект. Вызовы методов по умолчанию делегируются реальной реализации, но можно переопределить конкретные методы через `when().thenReturn()`. Пример: ```java @Mock List mockList; // Все методы возвращают null/0/false @Spy List spyList = new ArrayList<>(); // Реальные вызовы, но можно переопределить @Test void testMockVsSpy() { when(mockList.size()).thenReturn(100); // Задали поведение when(spyList.size()).thenReturn(100); // Переопределили реальный метод mockList.add("test"); // Ничего не произойдет spyList.add("test"); // Элемент добавится в список assertEquals(100, mockList.size()); // 100 (мок) assertEquals(100, spyList.size()); // 100 (переопределение) assertEquals(1, spyList.size()); // 1 (если убрать when()) } ``` Используй `@Mock` для полной изоляции, `@Spy` — когда нужна частичная замена поведения реального объекта.
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы