在SpringJUnit4ClassRunner中弹簧@Conditional

时间:2014-04-07 15:01:42

标签: java spring junit

当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;
}

我也在使用

进行测试
@RunWith(SpringJUnit4ClassRunner.class)

ProductionApplicationConfiguration.class 返回false时, constants-test.properties 正在加载并且它是正常的,但是如何告诉我的测试加载测试属性即使 ProductionApplicationConfiguration.class 返回 true

提前谢谢!

1 个答案:

答案 0 :(得分:1)

您可以在属性文件上使用具有相同名称的不同资源(src \ main \ java \ resources和src \ test \ java \ resources)进行生产和测试模式。默认情况下,测试尝试使用src \ test \ java \ resources中的属性,但如果找不到,则使用src \ main \ java \ resources中的属性。

在<13> intelliji中,您可以在模块设置中标记testResources。