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

В чем отличия между аннотациями @Spy и @Stub при использовании в тестировании?

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

sobes.tech AI

Аннотации @Spy и @Stub используются в тестировании для создания объектов-заглушек, но имеют разные цели и поведение:

  • @Spy — создает «шпион» на реальном объекте. Это значит, что по умолчанию вызываются настоящие методы объекта, но при необходимости можно подменять поведение отдельных методов. Используется, когда нужно частично контролировать поведение реального объекта, сохраняя его логику.

  • @Stub — создает простой заглушечный объект, который возвращает заранее заданные значения и не содержит реальной логики. Обычно используется для изоляции тестируемого кода от внешних зависимостей.

Пример с Mockito:

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

// вызов spyList.add("test") вызовет реальный метод add

@Stub
List<String> stubList = mock(List.class);
when(stubList.size()).thenReturn(10);

// stubList.size() вернет 10, а другие методы не имеют реальной реализации

Таким образом, @Spy позволяет контролировать и наблюдать за реальным объектом, а @Stub — полностью подменять поведение объекта.