Junior — Middle
103
Можете ли да објасните разлике између Mock и Spy у Mockito и када их треба користити?
Компаније где су питане
JSA Group
Firecode
Одговор од АИ
sobes.tech АИ
В 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 полезно, когда нужно проверить взаимодействие с реальным объектом, но контролировать часть его поведения.