Исключить SpringApplicationRunListener при запуске теста - PullRequest
0 голосов
/ 28 февраля 2020

Я использовал библиотеку, в которой есть класс, реализующий SpringApplicationRunListener

public class FromLibApplicationRunListener implements SpringApplicationRunListener {...}

Эта библиотека загружает много вещей, которые я не хочу иметь при запуске теста. Поэтому я пытаюсь создать TestApplication

@SpringBooApplication
@ComponentScan(excudeFilters = @ComponentScan.Filters(type= ASSIGNABLE_TYPE, 
   value={RealApp.java, FromLibApplicatioRunListener})
public class TestApp {
   public static main(String[] args) {
     SpringApplication.run(TestApp.class ,args);
   }
}

Но когда я запускаю TestApp, он все равно выдает исключение

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.....FromLibApplicationRunListner]: Constructor threw exception; nested exception is java.lang.ExceptionInInitializerError
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:184)
    at org.springframework.boot.SpringApplication.createSpringFactoriesInstances(SpringApplication.java:435)
    ... 6 more

Как я могу удалить эту библиотеку при запуске test?

Ответы [ 2 ]

0 голосов
/ 29 февраля 2020

Еще одно решение заключается в переопределении компонента в тестовой конфигурации:

@SpringBootTest(classes = MyTest.TestConfig.class)
class MyTest {

    @TestConfiguration
    static class TestConfig {

        @Bean
        public FromLibApplicationRunListener listenerStub() {
            return new FromLibApplicationRunListener() {
                // override here used SpringApplicationRunListener methods
            };
        }
    }
...
}

или

@SpringBootTest(classes = MyTest.TestConfig.class)
class MyTest {

    @TestConfiguration
    static class TestConfig {

        @Bean
        public SpringApplicationRunListener fromLibApplicationRunListener() {
            return new SpringApplicationRunListener() {};
        }
    }
...
}
0 голосов
/ 29 февраля 2020

Для этого можно использовать профили:

  1. Исключить тестовый профиль для класса слушателя
@Profile("!test")
public class FromLibApplicationRunListener implements SpringApplicationRunListener {...}
Установите профиль для тестового класса
...
@ActiveProfiles("test")
public class MyTest {

или установите активный профиль приложения в файле application.yaml (или application.properties)

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