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

Чем отличаются аннотации Mock и Spy в тестировании?

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

sobes.tech AI

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

  • @Mock создаёт полностью имитированный объект, у которого все методы по умолчанию ничего не делают (возвращают значения по умолчанию). Его поведение настраивается вручную через when(...).thenReturn(...). Используется для изоляции тестируемого кода от зависимостей.

  • @Spy создаёт частично имитированный объект, который вызывает реальные методы оригинального объекта, если не переопределены. Это полезно, когда нужно протестировать часть поведения объекта, сохраняя при этом реальную логику.

Пример:

@Mock
List<String> mockedList;

@Spy
ArrayList<String> spyList = new ArrayList<>();

// mockedList.add("test") не изменит состояние списка, нужно настраивать поведение
// spyList.add("test") вызовет реальный метод add и добавит элемент