如何为所有@SpringBootTest加载另一个属性文件并覆盖定义的默认属性

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

我在 Springboot (Spring 6) 应用程序中进行了多项测试。几个是几个SpringBootTest。

如果我有

src/test/resources/application.properties
,我需要复制
src/main/resources/application.properties
中定义的属性。

我想在我的测试中重复使用

src/main/resources/application.properties
,但只覆盖一些属性。

我可以添加

src/test/resources/application-myprofile.properties
(或其他配置文件)并将
@ActiveProfiles("myprofile")
添加到我的所有 @SpringBootTest 类中。

但我不想将其添加到每个 @SpringBootTest 类中。

我尝试用

src/test/java/Config.java
添加一个
@TestPropertySource
类:

@Configuration 
@TestPropertySource(locations = "classpath:application-myprofile.properties") 
public class
Config {

    public Config() {
        System.out.println("LOADING CONFIG");
    } 
}

我可以看到打印了“LOADING CONFIG”,因此配置类已加载,但它不会覆盖我的属性。

我在这里做错了什么?

代码结构:

src/main/java/ default @SpringBootApplication class
src/main/resources/application.properties src/test/java/
  Config.java
  @SpringBootTest classes
src/test/resources/application-myprofile.properties
spring-boot spring-boot-test application.properties
1个回答
0
投票

我建议创建测试特定的配置类并用注释标记它

@TestConfiguration
。假设您称其为
TestConfig
,它可能看起来像

@TestConfiguration
@PropertySource("classpath:api-test.properties")
public class TestConfig{
...
}

请注意,还有另一个注释

@PropertySource
,您可以在其中列出属性文件。我建议您创建单独的属性文件进行测试,即使您必须复制主属性文件中的某些属性。

您的测试文件应该如下所示:

@SpringBootTest
@ContextConfiguration(classes = {MyService.class, TestConfig.class})
@ExtendWith(MockitoExtension.class)
public class ApiServiceTest {

    @Resource
    private MyService myService;
...
}

在本例中,

MyService
是您要测试的类。在
@ContextConfiguration
中,您可以包含测试所需的其他课程。但在这里您可以看到如何在您的
TestConfig
类中添加您自己的属性文件

© www.soinside.com 2019 - 2024. All rights reserved.