spring boot使用TestSuite和不同的属性文件在多个数据库上集成测试

时间:2015-11-19 12:35:50

标签: spring unit-testing jpa spring-boot integration-testing

所以,我正在使用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)。

我想说的是:

  • 对于测试套件1,集成测试,运行所有这些测试 类首先使用derby属性文件然后使用oracle 属性文件
  • 测试套件2,典型的单元测试,只需使用derby

看起来像这样的东西:

@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级别上没有任何影响,只有一个属性文件,更不用说了。

提前致谢。

1 个答案:

答案 0 :(得分:3)

您最好的方法是为每个测试套件使用@ActiveProfiles,并引用不同的个人资料名称。由于配置文件是框架用于缓存上下文的键的一部分,因此它将为每个创建一个单独的上下文。

完成后,您可以在application-xyz.properties中创建src/test/resources,其中xyz是您个人资料的名称(derbyoracle或你喜欢什么名字。)

您的应用上的@PropertySource无用,默认情况下,Spring Boot会从类路径的根目录加载application.properties