在Spring测试的上下文中@IfProfileValue vs @ActiveProfiles

时间:2014-05-12 11:14:20

标签: spring-test

我参考了 Spring test 和以下注释:

我目前在我的应用程序中使用 @ActiveProfiles ,最近我发现 @IfProfileValue 注释的存在似乎提供了类似的功能。< / p>

有人可以解释这两个注释之间的差异,或许通过提供可以对比这两个注释的用法示例吗?

1 个答案:

答案 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的作者)