Sobes.tech
Junior — Middle
93

Czy możesz wyjaśnić różnice między Mock a Spy w Mockito i kiedy ich używać?

Firmy, w których zadano pytania
JSA Group
Firecode
IT OneIT One
AstonAston
ГазпромбанкГазпромбанк

Odpowiedź od AI

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