Назад к вопросам
IT One
Aston
Газпромбанк
Junior — Middle
66
Можете объяснить различия между Mock и Spy в Mockito и когда их следует использовать?
Компании, где спрашивали
JSA Group
Firecode
Ответ от нейросети
sobes.tech AI
В Mockito:
- Mock — это полностью имитированный объект, у которого все методы по умолчанию ничего не делают или возвращают значения по умолчанию. Его поведение настраивается вручную.
- Spy — это частично имитированный объект, который оборачивает реальный объект. По умолчанию вызывает реальные методы, но можно переопределять поведение отдельных методов.
Когда использовать:
- Mock — когда нужно полностью изолировать тестируемый класс от зависимостей и контролировать все вызовы.
- Spy — когда нужно протестировать реальный объект, но при этом подменить поведение некоторых методов (например, чтобы избежать побочных эффектов).
Пример:
List<String> list = new ArrayList<>();
List<String> spyList = Mockito.spy(list);
Mockito.doReturn("mocked").when(spyList).get(0);
System.out.println(spyList.get(0)); // Выведет "mocked"
System.out.println(spyList.size()); // Вызовет реальный метод size(), вернёт 0
Использование spy полезно, когда нужно проверить взаимодействие с реальным объектом, но контролировать часть его поведения.