Встречается на собеседованиях • сегодня
В чем разница между @Spy и @Stub
`@Spy` и `@Stub` — это аннотации из Mockito, но они служат разным целям.
**@Spy** создает частичный мок, оборачивая реальный объект. Вызовы методов по умолчанию делегируются реальному объекту, но можно переопределить конкретные методы. Пример:
```java
List list = new ArrayList<>();
List spyList = Mockito.spy(list);
spyList.add("one");
Mockito.when(spyList.size()).thenReturn(100); // Переопределяем size()
System.out.println(spyList.size()); // 100
System.out.println(spyList.get(0)); // "one" (реальный метод)
```
**@Stub** (в Mockito нет такой аннотации, вероятно, имеется в виду `@Mock`) создает полный мок. Все методы по умолчанию возвращают `null` или примитивные значения, если их не заглушить явно. Пример:
```java
List mockList = Mockito.mock(List.class);
Mockito.when(mockList.size()).thenReturn(10);
System.out.println(mockList.size()); // 10
System.out.println(mockList.get(0)); // null (метод не заглушен)
```
**Итог:**
- `@Spy` — частичный мок, работает с реальным объектом.
- `@Mock` (или `@Stub`) — полный мок, все методы нужно заглушать.

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