这是一个与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
实际上为空。
我认为启用基于弹簧轮廓的测试是一种普遍情况,但是我进行了很多搜索,但仍然不知道如何进行。有任何想法吗?非常感谢。