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

В чем отличия между объектами типа Mock и Spy в тестировании?

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

sobes.tech AI

В тестировании на Java объекты Mock и Spy используются для имитации поведения зависимостей, но между ними есть ключевые отличия:

  • Mock — это полностью имитированный объект, который не вызывает реальных методов. Его поведение полностью настраивается в тесте. Используется, когда нужно изолировать тестируемый класс от зависимостей.

  • Spy — это частично имитированный объект, который вызывает реальные методы, если для них не задано иное поведение. Позволяет отслеживать вызовы реальных методов и при необходимости подменять некоторые из них.

Пример с Mockito:

List<String> list = new ArrayList<>();
List<String> spyList = Mockito.spy(list);

spyList.add("one");
Mockito.verify(spyList).add("one");

List<String> mockList = Mockito.mock(List.class);
mockList.add("one");
Mockito.verify(mockList).add("one");

В mockList метод add не добавит элемент в список, а в spyList — добавит, если не переопределено поведение.