Junior — Middle
70
Тестілеуде @Spy мен @Mock қолданудың айырмашылығы неде?
Сұралған компаниялар
Ifellow
AI-дан жауап
sobes.tech AI
@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 — реальный объект с возможностью подмены отдельных методов.