Sobes.tech
Назад к вопросам
Junior — Middle
66

Можете объяснить различия между Mock и Spy в Mockito и когда их следует использовать?

Компании, где спрашивали
JSA Group
Firecode
IT OneIT One
AstonAston
ГазпромбанкГазпромбанк

Ответ от нейросети

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 полезно, когда нужно проверить взаимодействие с реальным объектом, но контролировать часть его поведения.