如何在@SpringBootTest中排除ApplicationContextInitializers?

时间:2017-12-15 10:30:48

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

我试图在"清洁"中运行@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 {}

有没有办法从MyApplicationContextInitializer排除@SpringBootTest

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

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

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

1 个答案:

答案 0 :(得分:0)

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