如何启用基于Spring Boot配置文件的测试?

时间:2018-10-23 08:59:06

标签: java spring spring-boot

这是一个与how to run/turn off selective tests based on profiles in spring boot类似但又存在的问题。

我知道@IfProfileValue注释提供了根据某些条件启用测试的功能,但是注释获得的属性来自System.properties,而spring.profiles.active不在其中。

我还知道我们可以使用@ProfileValueSourceConfiguration来自定义ProfileValueSource,如下所示:

测试

@RunWith(SpringRunner.class)
@SpringBootTest
@ProfileValueSourceConfiguration(value = SpringProfileValueSource.class)
@IfProfileValue(name = "spring.profiles.active", value = "test")
public class MyTest {

    // some tests
}

自定义ProfileValueSource

public class SpringProfileValueSource implements ProfileValueSource {
    @Override
    public String get(String key) {
        Environment environment = StaticSpringContext.applicationContext.getEnvironment();

        return environment.getProperty(key);
    }
}

由于SpringProfileValueSource将在Spring外部创建,因此我创建了以下类来获取Spring上下文:

StaticSpringContext

@Configuration
public class StaticSpringContext implements ApplicationContextAware {
    public static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        StaticSpringContext.applicationContext = applicationContext;
    }
}

但是,似乎所有属性检查都是在Spring开始之前进行的,因此,在applicationContext中使用StaticSpringContext 中的SpringProfileValueSource实际上为空

我认为启用基于弹簧轮廓的测试是一种普遍情况,但是我进行了很多搜索,但仍然不知道如何进行。有任何想法吗?非常感谢。

0 个答案:

没有答案