Sobes.tech
Junior — Middle

Quais são as diferenças entre as anotações @Spy e @Stub ao serem usadas em testes?

sobes.tech IA

Resposta da IA

Аннотации @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 — полностью подменять поведение объекта.