【问题标题】:Junit with HSQL/H2 without Spring/HibernateJunit 与 HSQL/H2 没有 Spring/Hibernate
【发布时间】:2013-06-23 02:10:20
【问题描述】:

我正在尝试使用 H2 或 HSQL 进行单元测试。但是我的应用程序不是spring和hibernate的。似乎大多数参考文献仅在内存数据库中用于 HSQL/H2 的 spring 和 hibernate 用于单元测试。

有人可以指出正确的参考,其中只有 hsql/h2 与 junit 一起使用吗?感谢您的时间。

【问题讨论】:

  • 您使用什么数据库 API? JDBC?

标签: java unit-testing junit hsqldb h2


【解决方案1】:

我通常会这样做:

在@Before 方法中,我建立了与内存数据库的连接,如下所示:

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

连接存储在实例变量中,因此可用于每个测试。

如果所有测试共享相同的表,我也会在 setup() 方法中创建这些表,否则每个测试都会创建自己的表:

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

在@After 方法中,我简单地关闭了连接,这意味着内存数据库被擦除,下一个测试使用干净的版本运行:

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

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

这都可以放入一个小的实用程序类中,以避免一些样板代码。如果您想以某种方式外部化测试数据,Apache 的 DbUtils 和 DbUnit 也可以让生活变得更轻松。

【讨论】:

    【解决方案2】:

    我知道我参加聚会有点晚了 :-)

    不久前我遇到了同样的问题,并创建了一个 JUNIT 集成,它使用 @Rule 机制为 JUnit 测试设置内存数据库。我发现它是一种能够测试我的数据库集成代码的真正简单而好方法。非常欢迎您提供反馈。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-18
      相关资源
      最近更新 更多