根据Spring测试的活动配置文件运行不同的@Sql语句

时间:2017-01-31 16:46:35

标签: spring spring-boot spring-data spring-test spring-orm

对于应用程序的集成测试,根据我们想要测试的内容,我们有2个独立的spring配置文件,一个使用H2作为嵌入式数据库,另一个使用嵌入式数据库作为数据库。 每个配置文件分别称为H2和MYSQL,对于我们的测试,我们有一个名为WithJsonItResources的公共基类,我们希望能够在每次测试执行后删除数据库,这就是目前的样子:

@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
@Sql(executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, statements = "DROP DATABASE mytestdb")
public abstract class WithJsonItResources extends WithJsonTestResources {
    protected WithJsonItResources(Class resourcesForClass) {
        super(resourcesForClass);
    }
}

如何添加某种验证或其他任何内容,以便如果配置文件为H2,则运行:

@Sql(executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, statements = "DROP ALL OBJECTS DELETE")

如果是它运行的MYSQL配置文件:

@Sql(executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, statements = "DROP DATABASE mytestdb")

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用 @Profile @IfProfileValue 来决定是启用H2还是MYSQL。

也不要对该语句进行硬编码,而是从application.properties中读取它并使用 @Value 根据活动配置文件解析它

文档: http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/testing.html