读书人

让Unitils实现excel上的多数据源支持

发布时间: 2012-10-28 09:54:44 作者: rapoo

让Unitils实现excel下的多数据源支持
说明:这里的多数据源需要利用spring中配置的多个DataSource.而且仅针对oracle数据库. 在oracle有一个schema的概念, 一个datasource下可能有多个schema, 而一个schema一般会跟一组用户名密码绑定, 这里我们采用用户名作为schema名称.
为了实现对多schema的支持, unitils提供了一个MultiSchemaXmlDataSetFactory, 也就是在采用xml的格式来实现多数据源的创建, 但不知道为什么原因, 没有提供对excel格式的多schema的支持, 而对于所有测试都采用excel来构造测试数据用户来说, 则显得有些无奈, 为了实现这个功能, 了解了一下unitils-dbunit, dbunit相关的源代码, 不过有些困难, 一个是dbunit提供的接口对我们的扩展有一些限制. 比如我们希望我们在excel中定义测试数据的时候, 每个sheet的名称将采用"datasourceName.tablename"的约定来定义. 因此我们必须在解析excel文件的时候, 必须从中已有的table中解析出datasource和tablename.
废话少说, 其具体做法是: 在从excel中取得DataSet之后(一个excel对应一个DataSet, 一个Sheet对应一个Table), 将DataSet中的所有Table根据datasource名称进行重组, 然后将得到的多个DataSet用MultiSchemaDataSet进行封装. 而MultiSchemaXlsDataSetFactory类的工作就是为了创建这个MultiSchemaDataSet.



另外目前本人使用的unitls版本为3.1, 而在其内部依赖的dbunit版本为2.2.2, 这个版本使用解析excel的poi版本在处理excel中cell的格式为日期的时候, 会有问题, 需要指定一下dbunit的最新版本2.4.6, 在maven中的依赖配置:
        <dependency>          <groupId>org.unitils</groupId>          <artifactId>unitils-dbunit</artifactId>          <version>${unitils.version}</version>          <exclusions>            <exclusion>                <groupId>org.dbunit</groupId>                <artifactId>dbunit</artifactId>            </exclusion>          </exclusions>        </dependency>        <dependency>            <groupId>org.apache.poi</groupId>            <artifactId>poi</artifactId>            <version>3.1-FINAL</version>            <scope>compile</scope>        </dependency>        <dependency>            <groupId>org.dbunit</groupId>            <artifactId>dbunit</artifactId>            <version>2.4.6</version>            <scope>compile</scope>        </dependency>

1 楼 zfanxu 2012-05-03 请问,为什么我在MYSQL数据库下,运行的你的代码,程序不报错,但是数据也没插入到数据库中? 2 楼 mojunbin 2012-05-10 "StringUtils"这个类是org.apache.commons.lang.StringUtils否? 3 楼 kkeli 2012-06-11 zfanxu 写道请问,为什么我在MYSQL数据库下,运行的你的代码,程序不报错,但是数据也没插入到数据库中?
晕了,dbunit本来就是为了不破坏数据库现场才使用的测试工具,测试结束后就回滚了

读书人网 >软件架构设计

热点推荐