Java @ActiveProfiles和@TestPropertySource之间的区别
这两种注释之间的区别是什么Java @ActiveProfiles和@TestPropertySource之间的区别,java,spring,spring-boot,Java,Spring,Spring Boot,这两种注释之间的区别是什么 @ActiveProfiles("test") @TestPropertySource({"classpath:/application-test.properties"}) 我在同一个测试类上看到了这两个注释,据我所知,它们都导致加载application-test.properties(覆盖主application.properties中的任何冲突属性)@ActiveProfiles @ActiveProfiles是一个类级注释,用于声明在为集成测试加载Appl
@ActiveProfiles("test")
@TestPropertySource({"classpath:/application-test.properties"})
我在同一个测试类上看到了这两个注释,据我所知,它们都导致加载application-test.properties(覆盖主application.properties中的任何冲突属性)
@ActiveProfiles
@ActiveProfiles是一个类级注释,用于声明在为集成测试加载ApplicationContext时哪些bean定义概要文件应处于活动状态
从上面的定义我们可以理解,要在运行测试时激活概要文件而不指定文件的实际位置,我们使用此注释加载该概要文件的属性
鉴于
@TestPropertySource
@TestPropertySource是一个类级注释,用于配置属性文件的位置()和内联属性(),以添加到环境的属性资源集中,用于集成测试的ApplicationContext
测试属性源的优先级高于从操作系统的环境或Java系统属性以及应用程序通过@PropertySource声明或编程方式添加的属性源加载的属性源。因此,可以使用测试属性源选择性地覆盖在系统和应用程序属性源中定义的属性。此外,内联属性的优先级高于从资源位置加载的属性
在@TestPropertySource
的情况下,我们明确提到要从中加载属性的文件的位置。这里不需要激活任何配置文件。您正在测试类上对此进行注释,以便从特定位置的文件加载属性。它可以是任何属性,如公共属性等
因此,在您的情况下,您可能只需要一个注释。我建议您删除@ActiveProfiles和test,反之亦然。与使用
@ActiveProfiles(“test”)
为测试激活整个配置文件相比,真正为@TestPropertySource
带来价值的是:
因此,测试属性源可用于选择性地覆盖系统和应用程序属性源中定义的属性
换句话说,我们可以重用所有已经定义的属性,只关注我们希望在测试期间具有不同值的特定属性。我们对应用程序上下文处理得越少越好,因为应用程序上下文的每一个定制都是使其不同于“真实”的另一件事在生产设置中启动的应用程序上下文。您是否尝试删除其中一个并注意到任何差异?您可以使用概要文件注释对bean进行注释,以分离或确定使用哪一个。我的意思是,您不希望在测试阶段运行bean,但希望在QAT阶段运行该bean。希望这有帮助