Junior — Middle
92
Quelle est la différence entre l'utilisation de @Spy et @Mock lors des tests?
Entreprises à qui on a demandé
Ifellow
Réponse de l'IA
sobes.tech IA
@Mock создаёт полностью имитированный объект, у которого все методы по умолчанию ничего не делают или возвращают значения по умолчанию. Это полезно, когда нужно изолировать тестируемый класс от зависимостей.
@Spy создаёт «шпион» на реальном объекте, позволяя вызывать настоящие методы, но при этом можно подменять отдельные методы или проверять вызовы. Это удобно, когда нужно частично использовать реальное поведение, а частично — подменять.
Пример:
List<String> list = new ArrayList<>();
List<String> spyList = Mockito.spy(list);
Mockito.doReturn("mocked").when(spyList).get(0);
System.out.println(spyList.get(0)); // Выведет "mocked"
System.out.println(spyList.size()); // Вызовет реальный метод size()
Таким образом, @Mock — это полностью фейковый объект, @Spy — реальный объект с возможностью подмены отдельных методов.