令人困惑@IfProfileValue
与@Profile
或@ActiveProfiles
无关。 @Profile
测试一个配置文件是否处于活动状态,@ActiveProfiles
将其设置为活动状态,@IfProfileValue
允许您检查Spring Environment
中的内容。武汉理工大学?我弃用了所有这些内容并添加了新的@IfEnvironment
,@IfProfile
和@ActivateProfiles
。
除了评论之外,我如何使用@IfProfileValue
来检测我的个人资料是否有效?我目前没有在这个项目上使用Spring Boot。答案应该显示代码,如果配置文件被激活为@ActiveProfiles( "test" )
,我们将假设我希望测试运行。
我尝试了@IfProfileValue(name = "activeProfiles", value = "test")
,但似乎跳过了测试,这意味着它不匹配。我推测这个问题可能与ActiveProfiles
是Collection
的事实有关。
答案 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.