Unitils集成DBUnit的问题-解决方案

  Unitils在集成DBunit时,如果数据库是mysql时,就会出现一些如下:

  org.unitils.core.UnitilsException: Error inserting test data from DbUnit dataset for method......

  org.dbunit.dataset.NoSuchColumnException......

  出现如上两个报错的原因是:unitils默认使用的是“DefaultMetadataHandler.java”这个类去加载数据库信息,从而得不到数据库schema的值,DefaultMetadataHandler.java中的实现代码如下:

boolean areEqual =
                areEqualIgnoreNull(catalog, catalogName, caseSensitive) &&
                areEqualIgnoreNull(schema, schemaName, caseSensitive) &&
                areEqualIgnoreNull(table, tableName, caseSensitive) &&
                areEqualIgnoreNull(column, columnName, caseSensitive);

  这个时候的schemaName是空的,但是传进来的schema是有值的,从而报错!

  解决方案两种:

  1、改源代码,去掉catalog和schema的比较

  2、写一个拓展类,去继承DbUnitModule,代码如下:  

import org.dbunit.database.DatabaseConfig;
import org.dbunit.ext.mysql.MySqlDataTypeFactory;
import org.dbunit.ext.mysql.MySqlMetadataHandler;
import org.unitils.dbunit.DbUnitModule;
import org.unitils.dbunit.util.DbUnitDatabaseConnection;

public class MySqlDbUnitModule extends DbUnitModule {

    @Override
    public DbUnitDatabaseConnection getDbUnitDatabaseConnection(
            final String schemaName) {
        DbUnitDatabaseConnection result = dbUnitDatabaseConnections
                .get(schemaName);
        if (null != result) {
            return result;
        }
        result = super.getDbUnitDatabaseConnection(schemaName);
        result.getConfig().setProperty(
                DatabaseConfig.PROPERTY_DATATYPE_FACTORY,
                new MySqlDataTypeFactory());
        result.getConfig().setProperty(
                DatabaseConfig.PROPERTY_METADATA_HANDLER,
                new MySqlMetadataHandler());
        return result;
    }
}

  然后修改unitils-core的jar包下的unitils-default.properties文件,

  unitils.module.dbunit.className=org.unitils.dbunit.DbUnitModule 更改为如下:

  unitils.module.dbunit.className=org.unitils.dbunit.MySqlDbUnitModule

  如果你使用自己定义的配置文件unitils.properties,则只需要修改自定义配置文件即可,就可以不需要修改jar中的unitils-default.properties

  当然出现这些问题的前提是所用数据库是mysql的情况下,以及解决方案~

Unitils集成DBUnit的问题-解决方案,布布扣,bubuko.com

时间: 2024-10-21 13:26:54

Unitils集成DBUnit的问题-解决方案的相关文章

Unitils集成DBUnit、Spring-单元测试

Unitils集成DBUnit.Spring-单元测试 1.maven-pom文件中引入相关jar包 <!-- Unitils -dbunit.Spring --> <dependency> <groupId>org.unitils</groupId> <artifactId>unitils-dbunit</artifactId> <version>3.4.2</version> </dependency

关于unitils联合dbunit的测试

unitils据说测试的能力很强大,可测试dao,service,web层,其实对数据库的测试我更关心,看到有人展示了测试的方法,数据直接写在xls表中,很直观,然后就依照他们的方法进行试验,花费的时间比较多,前后应该有半个月,总是在各种地方卡壳.最后总算是搞出来了,大约有两个关键点,其一是百度文库中有个朋友在文章:dbunit经典的NoSuchColumnException解决之道 给出了应该使用dbunit2.4.9的版本,具体原因也没深究,然后在另一篇中:Unitils集成DBUnit的问

持续集成4---单元测试解决方案

自动化单元测试可以使用maven或者直接使用ant来做,由于项目中没有使用maven,我们这里使用了ant 下面贴出单元测试的build.xml <?xml version="1.0"?> <!-- ============================================= auto unittest task ========================================== --> <project name=&quo

单元测试工具 unitils

Unitils模块组件 Unitils通过模块化的方式来组织各个功能模块,采用类似于Spring的模块划分方式,如unitils-core.unitils-database.unitils-mock等.比以前整合在一个工程里面显得更加清晰,目前所有模块如下所示: ?  unitils-core:核心内核包. ?  unitils-database:维护测试数据库及连接池. ?  unitils-DbUnit:使用DbUnit来管理测试数据. ?  unitils-easymock:支持创建Moc

Oracle 数据集成的实际解决方案

就针对市场与企业的发展的需求,Oracle公司提供了一个相对统一的关于企业级的实时数据解决方案,即Oracle数据集成的解决方案.以下的文章主要是对其解决方案的具体描述,望你会有所收获. Oracle 数据集成解决方案 Oracle数据集成解决方案用于在SOA.BI和数据仓库环境中构建.部署和管理以实时数据为中心的架构,包含了Oracle数据集成的所有要素--实时数据移动.转换.同步.数据质量.数据管理和数据服务--能确保各个复杂系统的信息及时.准确.一致. 通过使用Oracle数据集成,企业将

用Unitils测试BaseDao遇到的问题总结

<Spring 3.0就这么简单>.(陈雄华,林开雄)第8章,对如何用Unitils进行测试简单介绍,下面是我用Unitils进行单元测试过程中遇到的问题的总结. 1.设置好pom.xml依赖后,pom文件报错:Missing artifact javax.transaction:jta:jar:1.0.1B 原因是本地maven库中缺少jta-1_0_1B-classes这个jar,需要把这个jar安装到本地库中去.下载包含此jar的zip包,地址:http://download.csdn.

Oracle工程建设行业解决方案

为何选择Oracle工程建设行业解决方案? Oracle为工程建设企业提供一套全面.开放且集成的业务管理软件.服务器和存储解决方案.这些解决方案经过集成设计,能够实现卓越性能,从而优化业务的方方面面. 简化机会管理 Oracle销售管理 Oracle项目成本核算 了解有关用于简化机会管理的Oracle工程建设行业解决方案的更多信息 管理收尾与运作 Oracle财务管理软件 Oracle网上应收账款 Oracle项目成本核算 Oracle项目开票 Oracle人力资源 Oracle自助式人力资源

成熟的RosettaNet解决方案软件介绍

RosettaNet是一套B2B标准,以标准来优化供应链管理流程,它可以缩短整个供应链各个供货周期.RosettaNet 标准为电子商务标准化提供一个健壮的.非专有的解决方案,它是免费的,通过 RosettaNet 网站公开.这些标准是由全球领先的高科技公司通力协作而开发出来的.通过遵循这些标准,贸易合作伙伴.解决方案提供商及系统集成商可以利用这些专业技术和经验.RosettaNet 提供一个公共交流平台,也可以说是一种公共语言,它允许参与业务流程的不同贸易合作伙伴自动化流程并在 Interne

DBUnit使用案例

1 . 概念 DbUnit是为数据库驱动的项目提供的一个对JUnit 的扩展,除了提供一些常用功能,它可以将你的数据库置于一个测试轮回之间的状态. 2 . Maven集成DBUnit 2.1 导包            <!-- dbunit -->          <dependency>               <groupId>org.dbunit</groupId>               <artifactId>dbunit&