@ActiveProfiles 和 @TestPropertySource 之间的区别

kco*_*123 5 java spring spring-boot

这两个注释有什么区别?

@ActiveProfiles("test")
@TestPropertySource({"classpath:/application-test.properties"})
Run Code Online (Sandbox Code Playgroud)

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

San*_*har 4

@ActiveProfiles

\n
\n

@ActiveProfiles 是一个类级注释,用于声明在加载 ApplicationContext 进行集成测试时哪些 Bean 定义配置文件应处于活动状态。

\n
\n

从上面的定义我们可以理解,要在运行测试时激活配置文件而不指定文件的实际位置,我们使用此注释来加载该配置文件的属性。

\n

然而

\n

@TestPropertySource

\n
\n

@TestPropertySource 是一个类级注释,用于配置属性文件的locations() 和内联properties(),以添加到ApplicationContext 的环境PropertySource 集中以进行集成测试。

\n

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

\n
\n

的情况下@TestPropertySource我们明确提及您要从中加载属性的文件的位置。此处无需激活任何配置文件。您可以在测试类上对此进行注释,以便从特定位置的文件加载属性。它可以是任何属性,例如公共属性等。

\n

因此,在您的情况下,您可能只需要一个注释。我建议您删除 @ActiveProfiles 并进行测试,反之亦然。

\n