2

我们有一个使用 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 时,排序变得不区分大小写。但这对我们不起作用。有人可以帮忙吗?提前致谢。

4

1 回答 1

0

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

于 2013-03-05T03:43:31.440 回答