JUnit 5: Внедрить компоненты пружины в расширение (BeforeAllCallback / AfterAllCallback) - PullRequest
0 голосов
/ 05 июля 2019

tl; dr : Как создать экземпляр настраиваемого поставщика данных в качестве компонента Spring до запуска всех тестов?

Существует ли разумный способ внедрения компонентов Spring в настраиваемый JUnit Jupiterрасширение, которое реализует BeforeAllCallback?Метод beforeAll должен запустить сложный процесс до того, как MyTestClass будет выполнен с @ExtendWith(OncePerTestRunExtension.class).

Я создал Spring Boot Application (src/main/java), который предоставляет моему тесту (src/test/java) необходимыеданные.Подготовка данных может занять до нескольких часов.Это также дает мне абстрактный доступ к некоторым остальным конечным точкам.

Данные не меняются между процессами всех тестовых классов.Поэтому я просто хочу получить данные один раз.

Запись всех тестов в одном классе будет работать, но я думаю, что разделение на разные классы дает лучший обзор.

1 Ответ

2 голосов
/ 07 июля 2019

В методе beforeAll(ExtensionContext) вашего пользовательского BeforeAllCallback вы можете получить доступ к Spring ApplicationContext для текущего класса тестирования через SpringExtension.getApplicationContext(extensionContext).

Если вы сконфигурируете свой пользовательский поставщик данных в качестве компонента Spring в этом ApplicationContext, вы можете затем извлечь компонент из ApplicationContext внутри вашего расширения - например, через applicationContext.getBean(MyDataProvider.class).

Если вам нужно обработать данные и сохранить обработанные данные между тестами, вы можете сохранить их в root ExtensionContext.Store в JUnit Jupiter. Подробнее см. ExtensionContext.getRoot() и варианты getOrComputeIfAbsent(...) в ExtensionContext.Store.

...