如何在配置类中注释时使测试属性源工作

问题描述 投票:0回答:1

我尝试配置一个在进行 springboot 测试时使用 test 属性的类

应用程序.属性

meta=value

应用程序测试.属性

meta=value-test

@Configuration
@TestPropertySource("/application-test.properties")
public class AppConfig {
}


@RunWith(SpringRunner.class)
@SpringBootTest(classes = {AppConfig.class, TestService.class})
//@TestPropertySource("/application-test.properties")
public class SpringTest {

    @Autowired
    private TestService testService;

    @Value("${meta}")
    private String value;

    @Test
    public void test() {
        System.out.println(value); // "value"
    }
}

@TestPropertySource("/application-test.properties")
注释在
SpringTest
上时,“元”值将从
application-test.properties
读取为“值测试”。

但是当

@TestPropertySource("/application-test.properties")
仅在
AppConfig.class
上注释时,这将不起作用。 “元”值将从
application.properties
读取为“值”。

我想要实现的是每个尝试加载 AppConfig.class 的 Spring 测试都会自动使用 application-test.properties 。

我怎样才能实现这个目标?

java spring spring-boot spring-boot-test
1个回答
0
投票

您遇到的问题是由于 Spring Boot 在测试期间处理属性源和配置文件的方式造成的。当您使用

AppConfig
注释您的
@TestPropertySource
类时,它不会影响使用此配置的测试类。这是因为
@TestPropertySource
@ActiveProfiles
旨在用于测试类,而不是配置类。

要让所有测试在包含

application-test.properties
时自动使用
AppConfig.class
,您需要在测试期间激活“测试”配置文件,而无需单独注释每个测试类。

  • 在项目的测试资源目录 (

    src/test/resources
    ) 中,创建一个
    application.properties
    文件(如果尚不存在)。

  • 将以下行添加到

    src/test/resources/application.properties

    spring.profiles.active=测试

此行告诉 Spring Boot 在运行测试时激活“test”配置文件。结果,它将自动加载

application-test.properties
文件。

  • 您应该从
    @TestPropertySource("/application-test.properties")
    类中删除
    AppConfig
    注释,因为它在那里不起作用。

由于我们已经在测试中设置了活动配置文件

application.properties
,因此您无需使用
@TestPropertySource
@ActiveProfiles
注释您的测试类。您的测试课程可以保留为:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {AppConfig.class, TestService.class})
public class SpringTest {

    @Autowired
    private TestService testService;

    @Value("${meta}")
    private String value;

    @Test
    public void test() {
        System.out.println(value); // Should print "value-test"
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.