@ActiveProfiles和@TestPropertySource之间的区别

5
这两个注解有什么区别?
@ActiveProfiles("test")
@TestPropertySource({"classpath:/application-test.properties"})

我看到在同一个测试类中使用了这两个注解,据我所知,它们都会导致加载application-test.properties文件(覆盖主应用程序属性文件中的任何冲突属性)。

你尝试过移除其中一个,然后注意到了任何不同吗? - pvpkiran
您可以使用Profile注解对Bean进行注释,以分离或确定使用哪个Bean。我的意思是,在测试阶段不想运行一个Bean,但在QAT阶段想要运行该Bean。希望这可以帮到您。https://docs.spring.io/spring-framework/docs/current/javadoc-api/index.html?org/springframework/context/annotation/Profile.html - user5914598
2个回答

4

@ActiveProfiles

@ActiveProfiles 是一个类级别的注解,用于在集成测试加载ApplicationContext时声明应激活哪些bean定义配置文件。

通过以上定义,我们可以理解,在运行测试时,通过使用这个注解来加载对应配置文件中的属性,从而激活特定的配置文件。

@TestPropertySource

@TestPropertySource 是一个类级别的注解,用于配置属性文件的 locations() 和 inline properties() 路径,并将其添加到集成测试 ApplicationContext 的 PropertySources 集合中。

测试属性源具有比操作系统环境或Java系统属性加载的属性源以及通过 @PropertySource 或编程方式添加的属性源更高的优先级。因此,测试属性源可用于选择性地覆盖在系统和应用程序属性源中定义的属性。此外,inline properties 优先于从资源位置加载的属性。

对于 @TestPropertySource,我们需要明确指定要加载属性的文件位置。这里不需要激活任何配置文件,只需在测试类上注释即可从特定位置加载属性。可以是任何属性,如常用属性等。

所以在您的情况下,您可能只需要其中一个注解。建议您删除 @ActiveProfiles 或者 @TestPropertySource,并测试另一个注解。


0

对我来说,与使用@ActiveProfiles("test")激活整个测试配置文件相比,@TestPropertySource真正带来价值的是来自文档中的以下声明:

因此,测试属性源可用于有选择地覆盖系统和应用程序属性源中定义的属性。

换句话说,我们可以重复使用已经定义的所有属性,并且只关注我们想在测试期间具有不同值的特定属性。我们越少干预应用程序上下文,就越好,因为每个应用程序上下文的定制都会使其与在生产环境中启动的“真实”应用程序上下文不同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接