HSQL单元测试 - 如何创建多个内存中架构?

时间:2011-11-07 03:04:56

标签: maven junit hsqldb

我想在我的DAO单元测试中使用hsql来获取Web应用程序。 Web应用程序是针对mysql编写的,并在同一个mysql数据库中使用三种不同的模式。某些模式与其他模式中的数据具有FK关系。如果我要进行单元测试,我必须能够对可以容纳多个模式的数据库执行。

我知道HSQL支持多个模式,但我不知道如何配置hsql以为内存数据库设置多个模式。我读到我可以在server.properties文件中定义多个模式,但是文件需要位于调用java类的位置 - junit.jar位置?如果是这样,那么在我的Java Maven应用程序中很难支持。我怎么能:

  1. 运行内存中的hsql数据库以启动三个数据库?
  2. 我将在哪里将server.properties文件放在我的Maven应用程序中?
  3. 我可以指出hsql在junit jar所在的位置以外的位置使用server.properties文件(这对我来说是一个showstopper)吗?
  4. 是否可以通过欺骗的jdbc url为内存数据库配置多个模式?
  5. 我希望我可以解开彼此的模式,但目前这是不可能的。

    感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

HSQLDB在同一个数据库中支持多个模式。外键可以引用来自不同模式的表。以下内容适用于http://hsqldb.org

提供的最新HSQLDB 2.2.6快照
  1. 在运行测试之前,请为每个架构执行CREATE SCHEMA schemaname
  2. 无论在哪里,都可以在运行时指定命令行参数的绝对路径。请参阅服务器上的HSQLD指南和JavaDoc。
  3. 否。您可以使用SQL语句创建模式。
  4. 请注意,您有两个运行HSQLDB的选项,一个是作为服务器,另一个是作为嵌入式数据库。对于服务器,必须在测试运行之前启动它。在这两种情况下,您都需要连接到数据库并在测试之前创建模式。

答案 1 :(得分:0)

可以通过设置db name来创建不同的db。默认情况下,它将db名称创建为testdb,但是如果我们要创建多个db,则显式设置名称。

new EmbeddedDatabaseBuilder()
                .setType(EmbeddedDatabaseType.HSQL).setName("DB_NAME")
                .addScript("DDL.SQL") 
                .addScript("DML.SQL")
                .build();

如果您运行以下多行时间,您可以看到数据库:

DatabaseManagerSwing.main(new String[] { "--url", "jdbc:hsqldb:mem:" + dbnaes, "--user", "sa", "--password", "" });