Java SpringJUnit4ClassRunner中的spring@Conditional
当SpringJUnit4ClassRunner执行测试时,我需要在生产环境中加载测试属性 我在spring上下文中使用@Conditional来定义测试/生产属性文件,如:Java SpringJUnit4ClassRunner中的spring@Conditional,java,spring,junit,Java,Spring,Junit,当SpringJUnit4ClassRunner执行测试时,我需要在生产环境中加载测试属性 我在spring上下文中使用@Conditional来定义测试/生产属性文件,如: @Configuration public class ContextResource { @Bean @Conditional(TestApplicationConfiguration.class) public static PropertySourcesPlaceholderConfigurer testPrope
@Configuration
public class ContextResource {
@Bean
@Conditional(TestApplicationConfiguration.class)
public static PropertySourcesPlaceholderConfigurer testProperties() {
PropertySourcesPlaceholderConfigurer placeholderConfigurer = new PropertySourcesPlaceholderConfigurer();
Resource [] resources = new Resource[] {
new ClassPathResource("properties/constants/constants-test.properties")
};
placeholderConfigurer.setLocations(resources);
return placeholderConfigurer;
}
@Bean
@Conditional(ProductionApplicationConfiguration.class)
public static PropertySourcesPlaceholderConfigurer productionProperties() {
PropertySourcesPlaceholderConfigurer placeholderConfigurer = new PropertySourcesPlaceholderConfigurer();
Resource [] resources = new Resource[] {
new ClassPathResource("properties/constants/constants.properties")
};
placeholderConfigurer.setLocations(resources);
return placeholderConfigurer;
}
我也在用test
@RunWith(SpringJUnit4ClassRunner.class)
当ProductionApplicationConfiguration.class返回false时,constants-test.properties正在加载,这是正常的,但是即使ProductionApplicationConfiguration.class返回true,我如何告诉我的测试加载测试属性呢
提前谢谢你 您可以在生产和测试模式的属性文件上使用相同名称的不同资源(src\main\java\resources和src\test\java\resources)。默认情况下,测试尝试使用src\test\java\resources中的属性,但如果找不到,则将使用src\main\java\resources中的属性
在13 intelliji中,您可以在模块设置中标记testResources。仅当
TestApplicationConfiguration
为false
时,如何使ProductionApplicationConfiguration
为true?这是不可能的,原因ProductionApplicationConfiguration
仅当应用程序在生产服务器上运行时才设置为true
,这不是正确答案,因为即使在测试中,您也断言它是true
。无论如何,这是您的代码,因此如何将生产应用程序配置
与非测试应用程序配置
条件相结合,在测试中,您将只获得测试应用程序配置
。由于它们是静态的
方法,因此按名称顺序加载和检查它们。即使方法t*
为true
也不能应用,因为方法t*
已经提供了配置,以防true
。原因属性资源占位符配置器只能配置一次。