【问题标题】:How to exclude ApplicationContextInitializers in @SpringBootTest?如何在@SpringBootTest 中排除 ApplicationContextInitializers?
【发布时间】:2018-05-29 13:11:29
【问题描述】:

我正在尝试在“干净”上下文中运行 @SpringBootTest 而没有执行 MyApplicationContextInitializer。

MyApplicationContextInitializer 包含在 spring.factories 文件中的 compile-scope 依赖项中,如下所示:

org.springframework.context.ApplicationContextInitializer=\
com.eremic.myapp.MyApplicationContextInitializer

测试类:

@SpringBootTest(webEnvironment = RANDOM_PORT)
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = TestContext.class)
public class UsersControllerTest {}

测试配置:

@SpringBootConfiguration
public class TestContext {}

有没有办法从@SpringBootTest 中排除MyApplicationContextInitializer?

我已经厌倦了 excludeFilters @ComponentScan.Filters,但它对 ApplicationContextInitializer 没有影响。

另外,我尝试使用 @SpringBootApplication 注释 TestContext 并使用 scanBasePackages 和/或使用 exclude = MyApplicationContextInitializer.class 限制组件扫描,但它也没有效果。

到目前为止,防止MyApplicationContextInitializer 在@SpringBootTest 内部执行的唯一方法是删除声明MyApplicationContextInitializer 的maven 依赖项。

【问题讨论】:

    标签: spring spring-boot spring-boot-test


    【解决方案1】:

    目前没有办法过滤从工厂加载的ApplicationContextInitializer 类。要在每个测试级别上执行此操作,您需要使用使用不同 SpringBootTestContextBootstrapper 的自定义注释。引导程序需要返回过滤初始化程序的SpringBootContextLoader。随意提出问题,我们可以向 SpringBootContextLoader 添加一些受保护的方法供您覆盖。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    • 1970-01-01
    • 2021-04-12
    • 2017-03-26
    • 1970-01-01
    • 2017-09-28
    相关资源
    最近更新 更多