我参考了 Spring test 和以下注释:
我目前在我的应用程序中使用 @ActiveProfiles
,最近我发现 @IfProfileValue
注释的存在似乎提供了类似的功能。< / p>
有人可以解释这两个注释之间的差异,或许通过提供可以对比这两个注释的用法示例吗?
答案 0 :(得分:20)
如Javadoc所述,@IfProfileValue
用表示为特定测试配置文件或环境启用了测试。
然而,@ActiveProfiles
用来声明在为测试类加载ApplicationContext时应该使用哪些活动bean定义配置文件。
换句话说,您使用@IfProfileValue
控制是否执行测试类或测试方法或跳过,并使用@ActiveProfiles
设置将用于加载 ApplicationContext
进行测试的活动Bean定义配置文件。
请注意,在 bean定义配置文件的概念之前,@IfProfileValue
已在Spring Framework 2.0中引入, long ,并且@ActiveProfiles
首次引入在Spring Framework 3.1中。
两个注释都包含术语 profile ,但实际上它们完全不相关!
在考虑@IfProfileValue
的语义时,术语 profile 可能会产生误导。关键是要考虑测试组(如TestNG中的那些)而不是 profiles 。请参阅JavaDoc for @IfProfileValue中的示例。这是一段摘录:
@IfProfileValue(name = "test-groups", values = { "unit-tests", "integration-tests" })
public void testWhichRunsForUnitOrIntegrationTestGroups() {
// ...
}
如果您设置test-groups
系统属性(例如-Dtest-groups=unit-tests
或-Dtest-groups=integration-tests
),则会执行上述测试方法。
“Spring参考手册”中 Testing 章节的Context configuration with environment profiles部分提供了有关如何使用@ActiveProfiles
的详细示例。
此致
Sam(Spring TestContext Framework的作者)