java - Junit 与 HSQL/H2 一起使用,无需 Spring/Hibernate

标签 java unit-testing junit hsqldb h2

我正在尝试使用 H2 或 HSQL 进行单元测试。但我的应用程序不是spring和hibernate的。似乎大多数引用资料都只存在于内存数据库中用于 HSQL/H2 的 spring 和 hibernate 进行单元测试。

有人可以指出仅 hsql/h2 与 junit 一起使用的正确引用吗?感谢您的时间。

最佳答案

我通常会做这样的事情:

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

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

关于java - Junit 与 HSQL/H2 一起使用,无需 Spring/Hibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17311571/

相关文章:

java - Android Listview 显示 ArrayList 中的最后一个元素

Java Bouncy CaSTLe 密码学 - 使用 AES 加密

c# - 在单元测试中测量方法的执行时间以在运行速度太慢时抛出异常是否是一种好习惯?

Android NPE 运行 JUnit 测试

java - 如何在单元测试环境中使用抛出异常的 PowerMock 来模拟 Java 静态类初始化器

java - 使用Junit的三角测试: void type is not allowed

java - 如何使用 JAXB 返回 XML 文件

java - 将图像链接到对象或字符串或任何可以存储到 SharedPreferences 中的内容

python - 通过用新方法替换模型类的实例方法来模拟它

unit-testing - Haskell Test.Framework 指定从命令行运行的测试数量