如何在@SpringBootTest中排除ApplicationContextInitializers?

ere*_*mic 6 spring spring-boot spring-boot-test

我试图@SpringBootTest在“干净”的上下文中运行 a 而无需MyApplicationContextInitializer执行。

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

org.springframework.context.ApplicationContextInitializer=\
com.eremic.myapp.MyApplicationContextInitializer
Run Code Online (Sandbox Code Playgroud)

测试类:

@SpringBootTest(webEnvironment = RANDOM_PORT)
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = TestContext.class)
public class UsersControllerTest {}
Run Code Online (Sandbox Code Playgroud)

测试配置:

@SpringBootConfiguration
public class TestContext {}
Run Code Online (Sandbox Code Playgroud)

有办法排除MyApplicationContextInitializer@SpringBootTest

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

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

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

Phi*_*ebb 2

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