我在 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
我建议创建测试特定的配置类并用注释标记它
@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
类中添加您自己的属性文件