Исключение или аннулирование bean-компонента в конфигурации или тестах Spring - PullRequest
0 голосов
/ 05 июня 2018

У меня довольно большое приложение Spring Boot с множеством файлов конфигурации, которые я хотел бы протестировать.Я хотел бы иметь возможность протестировать полностью сконфигурированное приложение, но с отдельными бобами, исключенными в каждом тесте, в качестве хороших отрицательных контролей.Например, я бы хотел исключить отдельные WebMvcConfigurer bean-компоненты, такие как фильтр CORS, чтобы проверить, что конфигурация на самом деле вызывает прохождение тестов, а не только плохую запись теста.Можно ли исключить или перезаписать bean-компоненты во время инициализации теста или через дополнительную настройку?

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Вы можете добавить BeanFactoryPostProcessor, который удаляет bean-компонент из beanfactory (это происходит до создания экземпляра bean-компонента).
https://docs.spring.io/spring-framework/docs/5.0.6.RELEASE/javadoc-api/org/springframework/beans/factory/config/BeanFactoryPostProcessor.html

Вы можете добавить такой постпроцессор во вложенный класс @TestConfigurationвашего тестового класса, тогда этот bean-компонент загружается только для этого тестового класса в дополнение ко всем вашим обычным конфигурациям.

Но, честно говоря, это становится довольно запутанным, и это может быть признаком того, что ваш дизайн может быть как-то улучшен...

0 голосов
/ 06 июня 2018

Вы можете аннотировать свой тест с помощью @TypeExcludeFilters
https://docs.spring.io/spring-boot/docs/2.0.2.RELEASE/api/org/springframework/boot/test/autoconfigure/filter/TypeExcludeFilters.html

Я считаю, что вам нужно написать собственную реализацию TypeExcludeFilter, но это довольно просто.Обратите внимание, что фильтр применяется только к компонентно-отсканированным компонентам (не к компонентам автоконфигурации)

Вы также можете взглянуть на «тестовые фрагменты», которые предоставляет Spring Boot: https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-testing-spring-boot-applications-testing-autoconfigured-tests
Для многих изаннотации срезов (например, @WebMvcTest), которые вы можете добавить, включают и исключают более декларативным способом.

Если вы хотите исключить некоторые автоконфигурации, вы можете использовать аннотацию @ImportAutoConfiguration: https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/autoconfigure/ImportAutoConfiguration.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...