如何使用@IfProfileValue测试配置文件是否处于活动状态?

时间:2015-10-08 13:10:28

标签: java spring junit spring-test

令人困惑@IfProfileValue@Profile@ActiveProfiles无关。 @Profile测试一个配置文件是否处于活动状态,@ActiveProfiles将其设置为活动状态,@IfProfileValue允许您检查Spring Environment中的内容。武汉理工大学?我弃用了所有这些内容并添加了新的@IfEnvironment@IfProfile@ActivateProfiles

除了评论之外,我如何使用@IfProfileValue来检测我的个人资料是否有效?我目前没有在这个项目上使用Spring Boot。答案应该显示代码,如果配置文件被激活为@ActiveProfiles( "test" ),我们将假设我希望测试运行。

我尝试了@IfProfileValue(name = "activeProfiles", value = "test"),但似乎跳过了测试,这意味着它不匹配。我推测这个问题可能与ActiveProfilesCollection的事实有关。

2 个答案:

答案 0 :(得分:2)

萨姆钉了它。 (以及多年前接受和回答的事实)

要添加的一件事是,如果您希望将系统属性传递给测试,如果您使用像gradle这样的构建工具,将它们传播到JVM可能需要额外的步骤。

//build.gradle
tasks.withType(Test) {
    systemProperties System.properties
}

然后在集成测试中照常运行

//MyIntegrationTest.class
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ActiveProfiles("integration")
@IfProfileValue(name = "run.integration.tests", value = "true")
public class MyIntegrationTest {
    @Test
    public void myTest(){ ... }
}

最后,您可以使用您指定的属性从终端执行测试。

$> ./gradlew clean test -Drun.integration.tests=true

我最喜欢@IfProfileValue抓住System.property并手动检查assumeTrue/False的事情是没有加载Spring Context(或者你可能拥有的flyway /其他迁移)保持单元测试快速。

答案 1 :(得分:0)

不幸的是,根据我的经验,测试对@IfProfileValue的依赖性

@Test
@IfProfileValue(name="spring.profiles.active", values={"test"})

仅当将spring.profiles.active设置为JVM属性时才能工作,例如:     -Dspring.profiles.active =“测试”

@IfProfileValue just ignores spring.profiles.active from application.properties/yml.