Spring应用程序-通过测试属性覆盖应用程序属性

时间:2019-07-09 22:45:47

标签: spring spring-boot

我是新来的春天,如果有人能帮助我解决这个问题,我将不胜感激。

我有一个Spring Boot应用程序App1,它在主程序包和测试程序包中分别具有以下db属性:

src/main/resources/app1.properties

src/test/resources/app1-test.properties

我们假设app1.properties包含oracle数据库属性,而app1-test.properties包含h2数据库属性

通常,当我启动App1应用程序时,它会从app1.properties中拾取属性

我的要求是,当我创建应用程序的测试实例(例如TestApp1)时,应该选择app1-test.properties而不是app1.properties。

我该如何实现?请帮助。

4 个答案:

答案 0 :(得分:2)

如果要在为应用程序运行测试类时进行引用,则可以在类上方添加@ActiveProfiles(“ test”)注释,以包括app1-test.properties配置。

该类的顶部应如下所示:

    @ActiveProfiles("test")
    @ExtendWith(SpringExtension.class)
    @SpringBootTest(classes = Application.class, webEnvironment = WebEnvironment.RANDOM_PORT)
    public class YourTestClassName {

答案 1 :(得分:0)

@domorecalculus的答案看起来不错。虽然,由于我实际上从未使用过@ActiveProfile,所以我会继续发布并发布替代方法,以防您找不到所需的内容:

@RunWith(SpringRunner.class)
@TestPropertySource(locations = "classpath:application-test.properties")
@SpringBootTest
public class InvalidTransactionTests {
    ...
}

一个优势可能是此注释将您的src/main/testsrc/main/java完全分开。不利之处(对此我可能是错的)可能是因为src/main/java中已经存在该文件的基本名称“ application.properties”。

答案 2 :(得分:0)

将属性文件放在与application.property相同的位置,并遵循命名约定appliaction- {profile} .properties,例如application-dev.properties,application-test.properties,application-prod.properties

在application.properties中设置spring.profiles.active = test以使用测试属性和开发人员属性,您可以设置spring.profiles.active = dev,默认情况下将选择application.properties

答案 3 :(得分:0)

@domorecalculus回答说,完成此操作的标准方法是使用Spring配置文件。我建议您在Spring Profiles中进行更多的挖掘,它不仅为您提供配置级别的灵活性,还为您提供代码级别的灵活性,例如,您可以使用@Profile(value =“ dev”)注释一个类,以便加载该类仅在开发模式下运行应用程序时。您可以将其视为策略模式的实现,但不能在运行时更改配置文件。

回到您的问题,我以前是通过以下方式做到的:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = MyApp.class)
@ActiveProfiles("test")
public class TestMyService { 
 .....
}