Java 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

当SpringJUnit4ClassRunner执行测试时,我需要在生产环境中加载测试属性

我在spring上下文中使用@Conditional来定义测试/生产属性文件,如:

@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
。原因
属性资源占位符配置器只能配置一次。