Исключить обработчик событий ApplicationStartup при тестировании

Я недавно добавил класс ApplicationStartup в мой проект SpringBoot

@Component
public class ApplicationStartup
    implements ApplicationListener<ApplicationReadyEvent> { ...

Он реализует ApplicationListener.

Теперь, когда я запускаю мои старые тесты JUNit, которые не имеют ничего общего с этим классом, Testrunner пытается запустить мой StartupListener, который ни в этом не необходим, ни в этих случаях не подходит.

Как пропустить ApplicationListener при инициализации моих тестов?

@RunWith(SpringRunner.class)
@SpringBootTest
public class SubmissionItemManagerTest {...

2 ответа

Решение

Вы можете издеваться над ApplicationStartup учебный класс

Добавьте это объявление в ваш тестовый пример:

@MockBean
private ApplicationStartup applicationStartup

Это создаст поддельный экземпляр ApplicationStartup и пометить его как @Primary в вашем тестовом контексте, тем самым заменяя фактический экземплярApplicationStartup,

Вы можете создать отдельный класс приложения для тестирования и исключить компоненты, которые не требуются для тестирования:

@SpringBootApplication
@ComponentScan(excludeFilters = @ComponentScan.Filter(
        type = FilterType.ASSIGNABLE_TYPE, 
        value = { ApplicationStartup.class, 
                 RealApplication.class }))

public class TestApplication {

    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }
}

Тогда в вашем SubmissionItemManagerTest класс использовать TestApplication учебный класс:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestApplication.class)
public class SubmissionItemManagerTest {
    ...
}
Другие вопросы по тегам