如何在@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
添加一些受保护的方法供您覆盖。
我正在尝试在 "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
添加一些受保护的方法供您覆盖。