В чем разница между @SpyBean и @MockBean в Mockito?

В чем разница между аннотациями @SpyBean и @MockBean в Mockito?

Я уже прошел JavaDoc, но не понял разницы. Если возможно, приведите пример, когда использовать MockBean и когда SpyBean.


person Vikrant Chaudhary    schedule 16.05.2017    source источник


Ответы (2)


макет (неважно, говорим ли мы об обычных объектах или bean-компонентах) — это просто "пустая оболочка".

Этот фиктивный объект не имеет какого-либо отношения к основному производственному коду. Это объект, который выглядит как объект класса X. Но ни один из методов или полей, которые X имеет, "на самом деле" не существует в этой издевательской вещи.

В то время как шпион обертывает существующий объект вашего тестируемого класса. Значение: когда вы создаете шпиона, вы можете решить, должны ли вызовы метода, идущие к шпиону, быть "перехвачены" (тогда вы используете шпиона, как если бы это был макет); или быть «пропущенным» к реальному объекту, вокруг которого находится шпион.

См. здесь. некоторые конкретные примеры бобов. Или здесь...

person GhostCat    schedule 16.05.2017
comment
Спасибо, но не мог получить четкое представление. Можете ли вы уточнить, почему spybean похож на частичный mockbean, что является ограничением spybean? - person Vikrant Chaudhary; 18.05.2017
comment
Дело в том, что это задокументировано повсюду. Просто прочитайте ссылку, которую я предоставил; или ту другую ссылку, которую я только что добавил. шпион — это больше, чем насмешка, так что насмешка здесь ограничена. Я надеюсь, что этого достаточно, чтобы сделать мой ответ приемлемым ... как сказано: не ждите, что я буду повторять описания, которые уже задокументированы во многих местах. - person GhostCat; 18.05.2017
comment
@gstackoverflow Извините, я не могу здесь помочь. Мы пишем все наши тесты одинаково, и только недавно перешли на JUnit5 ... никогда не сталкивались с этой ошибкой ;-( - person GhostCat; 02.08.2021

очень важно отметить, что две аннотации, на которые вы ссылаетесь, исходят из Spring Boot, а не из Mockito (хотя эта Spring lib основана на Mockito)

смешивание тестовых фреймворков может дать запутанные и неточные результаты.

person heug    schedule 23.01.2020