如何在@SpringBootTest 中排除ApplicationContextInitializers?

How to exclude ApplicationContextInitializers in @SpringBootTest?

我正在尝试在 "clean" 上下文中 运行 一个 @SpringBootTest,而不执行 MyApplicationContextInitializer

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

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

测试class:

@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 and/or 限制组件扫描以使用 exclude = MyApplicationContextInitializer.class 但它有也没有影响。

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

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