Встречается на собеседованиях • сегодня
В чем разница между @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` — когда нужна частичная замена поведения реального объекта.

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы