Как мне выполнить код в моем @RunWith(SpringRunner.class)
@SpringBootTest(classes = {...})
тесте JUnit перед запуском Spring?
Этот вопрос задавался несколько раз (например, 1 , 2 ) но всегда "решался" по той или иной рекомендации по конфигурации, а не с универсальным ответом.Пожалуйста, не спрашивайте, что я собираюсь сделать в этом коде, а просто предложите чистый способ сделать это.
Попытка до сих пор и не удалось:
Расширить SpringJUnit4ClassRunner
, чтобы получить класс, конструктор которого может запускать пользовательский код перед инициализацией Spring.Сбой, потому что super(testClass)
должен быть вызван первым делом и уже делает много вещей, которые мешают.
Расширьте Runner
, чтобы получить класс, который делегирует SpringRunner
вместо того, чтобы наследовать это.Этот класс может запускать пользовательский код в своем конструкторе до фактического создания экземпляра SpringRunner.Однако эта настройка завершается с ошибочными сообщениями об ошибках, такими как java.lang.NoClassDefFoundError: javax / servlet / SessionCookieConfig ."Obscure", потому что мой тест не имеет веб-конфигурации и поэтому не должен вмешиваться в сеансы и файлы cookie.
Добавление ApplicationContextInitializer
, которое запускается до того, как Spring загрузит свой контекст.Эти вещи легко добавить к фактическому @SpringApplication, но трудно добавить в Junit.Они также довольно поздно в этом процессе, и большая часть Spring уже началась.