在maven中的集成测试之间删除内存DB中的H2

时间:2011-11-25 20:35:13

标签: spring maven h2

我有以下情况。 我有一个Hibernate-Spring项目,它可以在mySQL上进行生产,并使用H2内存数据库进行集成测试,这是在运行中创建的。 目前,当我使用maven运行整合测试时,我会收到错误,因为数据库是在测试之间维护的。这是不可接受的,因为我计划在新数据库上运行我的测试。 如何在测试之间强制删除DB中的所有数据? 有没有办法告诉maven删除架构并为每个测试文件再次生成它?

2 个答案:

答案 0 :(得分:3)

我会看看Spring's support for embedded databases。您可以让Spring为您进行数据库创建和设置,并让您以简单的DataSource访问它。您真正需要做的就是提供sql脚本来创建/填充数据库,每次运行时,都会重新创建数据库。

<jdbc:embedded-database id="dataSource" type="h2">
    <jdbc:script location="classpath:schema.sql"/>
    <jdbc:script location="classpath:test-data.sql"/>
</jdbc:embedded-database>

不要忘记jdbc命名空间:

http://www.springframework.org/schema/jdbc
http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd

答案 1 :(得分:1)

您是如何运行集成测试的? Spring具有对transactional测试的内置支持。您也可以在每次测试后手动DROP并重新创建数据库,这非常简单:

SCRIPT NOPASSWORDS DROP TO 'file.sql'

然后使用以下命令恢复它:

RUNSCRIPT FROM 'file.sql'

我猜几乎每个测试框架JUnit / TestNG / Fitensse / Selenium / ...都允许在所有测试之前和之后运行一些自定义代码

Here是我的博客文章,解释了它的工作原理以及ScalaTest的示例设置。