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

时间:2012-11-02 10:10:10

标签: spring hibernate struts2 testng hsqldb

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

对于前。

Datasource url = jdbc:hsql:mem:TEST_DB

用户名= sa

密码=

Driver = org.hsqldb.jdbcDriver

Hibernate dialect = org.hibernate.dialect.HSQLDialect

Hibernate.hbm2ddl.aoto = create

   @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 个答案:

答案 0 :(得分:0)

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