对于测试套件,用内存中的 HSQLDB 替换 MYSQL 不起作用

Posted

技术标签:

【中文标题】对于测试套件,用内存中的 HSQLDB 替换 MYSQL 不起作用【英文标题】:For test suite, replacing MYSQL by in memory HSQLDB is not working 【发布时间】:2012-11-02 10:10:09 【问题描述】:

我们有一个使用 Struts、Spring 和 hibernate 的应用程序。 以前,我们使用 mysql 数据库来使用 testng 框架运行测试套件。 现在我们要使用 HSQLDB 的“内存”数据库。 我们已经进行了所有必需的代码更改,以便在“内存中”模式下使用 HSQLDB。

例如

数据源 url = jdbc:hsql:mem:TEST_DB

用户名 = sa

密码=

驱动程序 = org.hsqldb.jdbcDriver

休眠方言= org.hibernate.dialect.HSQLDialect

Hibernate.hbm2ddl.aoto = 创建

   @Autowired
private DriverManagerDataSource dataSource;
private static Connection dbConnection;
private static IDatabaseConnection dbUnitConnection;
private static IDataSet dataSet;
private MockeryHelper mockeryHelper;

    public void startUp() throws Exception 
mockeryHelper = new MockeryHelper();
        if (dbConnection == null) 
            dbConnection = dataSource.getConnection();
            dbUnitConnection = new DatabaseConnection(dbConnection);
            dbUnitConnection.getConfig().setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new HsqldbDataTypeFactory());
            dataSet = new XmlDataSet(new FileInputStream("src/test/resources/test-data.xml"));
        
        DatabaseOperation.CLEAN_INSERT.execute(dbUnitConnection, dataSet);

我们已经对我们的基类进行了必要的代码更改,我们在每次测试之前和之后启动和拆卸数据库。 我们使用 test-data.xml 文件,从中我们使用 testng 框架将测试数据插入到创建的数据库中。现在我的问题是

1.当我运行测试用例时,数据库被创建并且数据也被正确插入。但是,当我尝试从 struts 的拦截器中检索它们时,我各自的 daos 返回空对象列表。

2.我们使用 HSQLDB 版本 1.8.0.10。对其他项目进行相同的配置。在该项目中,大多数测试用例都成功运行,但其中一些测试用例的数据排序顺序不正确。 我们发现 HSQLDB 对排序是区分大小写的。并且有一个属性 sql.ignore_case,当设置为 true 时,排序变得不区分大小写。但这对我们不起作用。 有人可以帮忙吗? 提前致谢。

【问题讨论】:

【参考方案1】:

恐怕sql.ignore_case 在您的 HSQLDB 版本中不可用,因为它甚至不在最后一个稳定版 (2.2.9) 中,这与文档所说的相反。但是,如this thread 中所述,最新的快照确实包含它。我自己没有使用 1.8,而是在创建任何表之前执行SET IGNORECASE TRUE,它在 2.2.9 中可以使用。如果你真的需要 1.8,第三种选择可能是从最新源中选择相关代码,将其添加到 1.8 源并重新编译,不知道这有多难/容易。

【讨论】:

以上是关于对于测试套件,用内存中的 HSQLDB 替换 MYSQL 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

内存中的 hsqldb 和目标 junit 测试

如何告诉 HSQLDB 允许为 SERIAL 定义身份?

如何在 Spring Boot 测试中连接到内存中的 HSQLDB 以进行查询

HSQLDB 内存设置的 HSQLDB 约束违规和 SQL 查询日志

仅在调试代码时出现进程中的 hsqldb 错误

hsqldb 模式创建