【问题标题】:HSQL Unit Test -- How to Create Multiple In-Memory Schemas?HSQL 单元测试——如何创建多个内存模式?
【发布时间】:2011-12-23 08:35:37
【问题描述】:

我想在 Web 应用程序的 DAO 单元测试中使用 hsql。 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 文件(这对我来说是个大问题)?
  4. 是否可以仅通过欺骗的 jdbc url 为内存数据库配置多个模式?

我希望我能解开这些模式,但目前还不可能。

感谢您的帮助!

【问题讨论】:

    标签: maven junit hsqldb


    【解决方案1】:

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

    1. 在运行测试之前,请为每个架构执行 CREATE SCHEMA schemaname
    2. 不管在哪里,运行时都可以在命令行参数上指定绝对路径。请参阅服务器上的 HSQLD 指南和 JavaDoc。
    3. 是的。
    4. 没有。您使用 SQL 语句创建架构。

    请注意,您有两种运行 HSQLDB 的选项,一种是作为服务器,另一种是作为嵌入式数据库。在服务器的情况下,它必须在测试运行之前启动。在这两种情况下,您都需要在测试之前连接到数据库并创建模式。

    【讨论】:

    • 啊! create schema(不创建数据库)!太好了,我已将其插入,现在能够创建多模式内存数据库。感谢您的帮助。
    【解决方案2】:

    可以通过设置数据库名称来创建不同的数据库。默认情况下,它创建的 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", "" });
    

    【讨论】:

    • 这个问题的任何地方都没有提到或标记 Spring 框架
    猜你喜欢
    • 2010-12-26
    • 2019-12-10
    • 2011-09-25
    • 2020-07-05
    • 2013-08-05
    • 1970-01-01
    • 2018-07-16
    • 2016-12-31
    • 1970-01-01
    相关资源
    最近更新 更多