Pull to refresh

Comments 8

Благодарю за статью!

Возник вопрос: дёргать repository напрямую, не очень хорошая практика. Лучше оборачивать всё внутри service'а. Она здесь присутствует для упрощения? И будет ли работать SpyBean с внедрённым объектом сервиса, вместо репозитория?

В примере ведь дёргают userDataRepositoryчерез userDataService . Непосредственно к репозитарию обращаюся только в одном месте, для вызова findByUsername, что в интеграционном тесте вполне допустимо.

Можно упомянуть, что @SpyBean из spring-boot задепрекейчен, взамен него предлагается использовать @MockitoSpyBean из spring-framework.

Спасибо, не знал :)
Я в своих проектах использую версию spring-boot 3.3.0 (Spring Framework 6.1.8), а @MockitoSpyBean появился с версии spring-boot 3.4.0 (Spring Framework 6.2.0)

Контейнер корректно подставляет именно этот спай бин репо в сервис? Не создает новый бин, а подставляет именно этот замоканный экземпляр?

Использование аннотации @MockBean в тестах, которые будут extends ваш родительский тест с @SpringBootTest, приводит к созданию нового спринг контекста. @SpyBean над бином в родительском тесте и Mockito.when() в дочернем - спринг контекст возьмётся из кеша. Если вы не хотите, чтобы тесты вашего проекта проходили час - надо постараться не плодить контексты спринга.

Хм интересно. Сами наткнулись на практике или в доке где-то описано ?

Практика. Оптимизировал тесты на одном из проектов.

Sign up to leave a comment.

Articles