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

2023-11-27

如此令人困惑@IfProfileValue与以下无关@Profile or @ActiveProfiles. @Profile测试配置文件是否处于活动状态,@ActiveProfiles将它们设置为活动状态,并且@IfProfileValue允许你在 Spring 中检查事情Environment。什么?弃用所有这些并添加新的@IfEnvironment, @IfProfile, and @ActivateProfiles.

抛开评论不谈,我该如何使用@IfProfileValue检测我的个人资料是否处于活动状态?目前我没有在这个项目上使用 Spring Boot。答案应该显示代码,并且我们假设如果配置文件被激活为我希望运行测试@ActiveProfiles( "test" ).

I tried @IfProfileValue(name = "activeProfiles", value = "test")但这似乎跳过了测试,这意味着它不匹配。我推测这个问题可能与以下事实有关ActiveProfiles is a Collection.


如此令人困惑@IfProfileValue与以下无关@Profile or @ActiveProfiles.

这是正确的,我在这里详细解释了这一点:https://stackoverflow.com/a/23627479/388980

...我假设您已经看到了,因为您昨天评论了我的答案。

原因是@IfProfileValue与以下无关@Profile or @ActiveProfiles是由于框架的演变。请参阅下文了解更多详情。

@Profile测试配置文件是否处于活动状态,@ActiveProfiles将它们设置为活动状态,并且@IfProfileValue允许 你在春天检查事情Environment.

这些说法并不完全正确,尤其是最后一部分。

@Profile用于选择性地启用组件(例如,@Service, ETC。),@Configuration类,或@Bean方法(如果指定的之一)bean 定义配置文件春季活跃Environment为了ApplicationContext。该注释与测试没有直接关系:@Profile should not用于测试类。

@ActiveProfiles用于指定哪个bean 定义配置文件(例如,那些通过@Profile)在加载时应该处于活动状态ApplicationContext用于集成测试。

@IfProfileValue does not允许你在春天检查事情Environment。我不知道你为什么这么假设,因为 Spring 框架中的任何文档都没有说明这一点。正如我在上述主题中所说:

请注意@IfProfileValue在 Spring Framework 2.0 中引入,long在 bean 定义配置文件的概念之前,以及@ActiveProfiles首次在 Spring Framework 3.1 中引入。

在上述主题中,我还指出了以下几点:

在考虑语义时,“配置文件”一词可能会产生误导@IfProfileValue。关键是要考虑“测试组”(如 TestNG 中的测试组)而不是“配置文件”。请参阅中的示例@IfProfileValue 的 JavaDoc.

我该如何使用@IfProfileValue检测我的个人资料是否处于活动状态?

这取决于,而且......我假设你的意思是bean 定义概要文件当你说“个人资料”时。

如果您正在使用@ActiveProfiles设置bean 定义配置文件对于您的测试,您当前无法使用@IfProfileValue以确定是否bean 定义概要文件是活跃的,因为bean 定义配置文件配置通过@ActiveProfiles直接在测试中设置ApplicationContext而不是作为 Java 系统属性。

但是,如果您正在设置bean 定义配置文件 only通过spring.profiles.active系统属性,那么它would可以使用@IfProfileValue以确定是否bean 定义概要文件是活跃的,因为@IfProfileValue实际上适用于系统属性。例如,您可以使用以下内容:

@IfProfileValue(name = "spring.profiles.active", value = "test")

I tried @IfProfileValue(name = "activeProfiles", value = "test")但 这似乎跳过了测试,这意味着它不匹配。

从此以后那行不通了activeProfiles是不正确的属性名称。正确的系统属性名称是spring.profiles.active. See AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAME了解详情。


事实是@IfProfileValue不协调工作@ActiveProfiles对于 Spring 团队来说是一个已知问题。请查阅以下 JIRA 问题以了解更多详细信息,并根据需要加入讨论。

  • https://jira.spring.io/browse/SPR-7754
  • https://jira.spring.io/browse/SPR-8982
  • https://jira.spring.io/browse/SPR-11677

希望这能为您澄清情况!

Sam (Spring TestContext 框架的作者)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐