所以,我正在使用JPA并基于Oracle数据库开发Spring Rest API。
我有一些集成测试,它们使用Derby(嵌入式数据库)。 src / test / resource中有一个不同的application.properties文件,其中包含derby详细信息。
我的项目中没有XML,在配置方面除此之外没有任何内容。 (顺便说一句,我不是春季冠军..)
@Configuration
@PropertySource(value = { "classpath:application.properties"}, ignoreResourceNotFound = true)
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
我需要的是我的集成测试可以在Derby和oracle上运行(很快就会有第三个db)。
我想说的是:
看起来像这样的东西:
@RunWith(Suite.class)
@TestPropertySource(
locations = "/application_oracle.properties",
locations = "/application_derby.properties"
)
@Suite.SuiteClasses({
//Integration
CustomerApiIntegrationTest.class,
StoreApiIntegrationTest.class
})
public class IntegrationTestsSuite{
}
和
@RunWith(Suite.class)
@TestPropertySource(
locations = "/application_derby.properties"
)
@Suite.SuiteClasses({
SimpleCustomerTest.class,
SimpleStorreTest.class
})
public class OtherTestsSuite{
}
但它不起作用。这个TestPropertySource似乎在testSuite级别上没有任何影响,只有一个属性文件,更不用说了。
提前致谢。
答案 0 :(得分:3)
您最好的方法是为每个测试套件使用@ActiveProfiles
,并引用不同的个人资料名称。由于配置文件是框架用于缓存上下文的键的一部分,因此它将为每个创建一个单独的上下文。
完成后,您可以在application-xyz.properties
中创建src/test/resources
,其中xyz
是您个人资料的名称(derby
,oracle
或你喜欢什么名字。)
您的应用上的@PropertySource
无用,默认情况下,Spring Boot会从类路径的根目录加载application.properties
。