Java JUnit、H2、JaxRS、测试方法之间的内存数据库

Java JUnit、H2、JaxRS、测试方法之间的内存数据库,java,hibernate,junit,jersey,jax-rs,Java,Hibernate,Junit,Jersey,Jax Rs,如何在测试方法之间删除、回滚或断开H2数据库的连接 下面是我的hibernate测试配置: <property name="connection.driver_class">org.h2.Driver</property> <property name="connection.url"> jdbc:h2:mem:test;DB_CLOSE_DELAY=0;INIT=RUNSCRIPT FROM './h2-ext/add_to_

如何在测试方法之间删除、回滚或断开H2数据库的连接

下面是我的hibernate测试配置:

    <property name="connection.driver_class">org.h2.Driver</property>
    <property name="connection.url">
        jdbc:h2:mem:test;DB_CLOSE_DELAY=0;INIT=RUNSCRIPT FROM './h2-ext/add_to_date.sql'
    </property>
    <property name="hbm2ddl.auto">create</property>
似乎应该有一种简单的方法来执行这样的集成测试

也许我可以使用某种类型的事务性注释?但是,我想知道如何使用相对普通的jersey+JUnit来实现这一点

Jersey是2.12,Java1.7,H2是1.4.181,JUnit是4.11


版本可以协商。

我正在使用一个SQL文件来处理(重新)初始化。对于这样的文件,您可以使用:

import org.h2.tools.RunScript;

@Autowired
private DataSource dataSource;  // get your DataSource somehow

@Before
public void setup() {
    RunScript.execute(dataSource.getConnection(), new FileReader("src/test/resources/testdb/data.sql");
    ...
每次测试,数据库都会恢复正常

但不要并行运行测试

另一种可能更好的方法:

  • 编写测试,以便数据库的状态无关紧要,并且每个测试可以与其他测试和自身并行运行。然后您可以使用这些测试进行负载测试
Arquillian有一个您可能感兴趣的持久性扩展。如果执行SQL语句
shutdown
,会发生什么情况?这是一个内存数据库,我想应该可以清除它。
import org.h2.tools.RunScript;

@Autowired
private DataSource dataSource;  // get your DataSource somehow

@Before
public void setup() {
    RunScript.execute(dataSource.getConnection(), new FileReader("src/test/resources/testdb/data.sql");
    ...