В чем отличия между аннотациями @Spy и @Stub при использовании в тестировании?
Answer from AI
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 — полностью подменять поведение объекта.