对于测试套件,用内存中的 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 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Boot 测试中连接到内存中的 HSQLDB 以进行查询