2013-06-26 106 views
4

我正在尝试使用H2或HSQL进行单元测试。但我的应用程序不是春天和冬眠。看起来大部分的参考资料都是针对单元测试的内存数据库中的HSQL/H2的spring和hibernate。Junit with HSQL/H2 without Spring/Hibernate

有人能指出一个正确的参考,其中只有hsql/h2与junit一起使用吗?欣赏你的时间。

+0

您使用的数据库API是什么? JDBC? –

回答

10

我后容易做这样的事情:

在@Before方法我建立一个内存数据库的连接,这样的事情:

@Before 
public void setup() 
{ 
    this.dbConnection = DriverManager.getConnection("jdbc:hsqldb:mem:testcase;shutdown=true", "sa", null); 
} 

连接存储在一个实例变量,所以它适用于每个测试。

那么,如果所有测试共享相同的表,我也创建这些设置()方法中,否则每个测试创建自己的表:

@Test 
public void foo() 
{ 
    Statement stmt = this.dbConnection.createStatement(); 
    stmt.execute("create table foo (id integer)"); 
    this.dbConnection.commit(); 
    ... now run the test 
} 

在@After方法我SIMPLIC关闭连接这指的内存数据库已被清除,并下试用干净的版本上运行:

@After 
public void tearDown() 
    throws Exception 
{ 
    dbConnection.disconnect(); 
} 

有时候我需要运行unitt的测试agains一个真正的数据库服务器(你不能测试的Postgres或Oracle特定功能使用HSQLDB或H2)。在这种情况下,我只为每个Testclass建立连接,而不是为每个测试方法建立一次连接。然后我有方法删除所有对象以清理模式。

这可以放在一个小实用程序类,以避免一些样板代码。如果你想以某种方式外部化测试数据,Apache的DbUtils也可以让DbUnit变得更容易。

0

我知道我有点迟到了:-)

我有同样的问题而回,并创建了使用@rule机制设置的内存数据库的JUnit测试JUnit的整合。我发现它是测试我的数据库集成代码的一个真正简单而好的方法。反馈是值得欢迎的。

源代码和使用说明可在https://github.com/zapodot/embedded-db-junit

相关问题