Исключить обработчик событий 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 {
...
}