关于unitils联合dbunit的测试

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

实验环境为win7 64bit,idea15.0.2

测试数据采用excel表的形式:

数据库脚本如下:

-- database schema automatically loaded by unitils before tests are run  fileName:001_create_schema.ddl
 
CREATE TABLE `t_user` (
  `user_id` int(11) NOT NULL auto_increment,
  `user_name` varchar(32) NOT NULL,
  `user_age` varchar(32) NOT NULL,
  PRIMARY KEY  (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

 

unitils.properties配置如下:

unitils.modules=database,dbunit,hibernate,spring,
#unitils.module.dbunit.className=org.unitils.dbunit.DbUnitModule
 
database.driverClassName=com.mysql.jdbc.Driver
database.url=jdbc:mysql://localhost:3306/test_ssh
database.dialect = mysql
database.userName=root
database.password=
 
database.schemaNames=test_ssh
 
updateDataBaseSchema.enabled=true
 
# unitils will construct the test database using the ddl file found in this directory
dbMaintainer.autoCreateExecutedScriptsTable=true
dbMaintainer.script.locations=resources/dbscripts
dataSetStructureGenerator.xsd.dirName=resources/xsd
 
 
DbUnitModule.DataSet.factory.default=com.tgb.test.dataset.excel.MultiSchemaXlsDataSetFactory
DbUnitModule.ExpectedDataSet.factory.default=com.tgb.test.dataset.excel.MultiSchemaXlsDataSetFactory
 
 
DbUnitModule.DataSet.loadStrategy.default=org.unitils.dbunit.datasetloadstrategy.impl.CleanInsertLoadStrategy
DatabaseModule.Transactional.value.default=commit
 
unitils.module.spring.className=org.unitils.spring.SpringModule
#unitils.module.spring.runAfter=database
unitils.module.spring.enabled=true
 
unitils.module.dbunit.className=org.unitils.dbunit.MySqlDbUnitModule
 
 

 

注意:unitils.module.dbunit.className需替换成自定义的类

 

unitils-local.properties配置如下:

####################################
# Default configuration of Unitils #
####################################
database.userName=root
database.password=root
dbMaintainer.keepRetryingAfterError.enabled=true

 

自定义类为:

/**
 * fileName:MySqlDbUnitModule.java
 */
package org.unitils.dbunit;
 
import org.dbunit.database.DatabaseConfig;
import org.dbunit.dataset.datatype.BooleanDataType;
import org.dbunit.ext.mysql.MySqlDataTypeFactory;
import org.dbunit.ext.mysql.MySqlMetadataHandler;
import org.hibernate.metamodel.relational.Database;
import org.unitils.dbunit.DbUnitModule;
import org.unitils.dbunit.util.DbUnitDatabaseConnection;
 
/**
 * Created by luhx on 2016-2-2.
 */
public class MySqlDbUnitModule extends DbUnitModule {
 
    @Override
    public DbUnitDatabaseConnection getDbUnitDatabaseConnection(
            final String schemaName) {
 
        DbUnitDatabaseConnection dbConn = super.getDbUnitDatabaseConnection(schemaName);
        dbConn.getConfig().setProperty(DatabaseConfig.FEATURE_CASE_SENSITIVE_TABLE_NAMES, Boolean.valueOf(true));//dbConn.getConfig().getProperty(schemaName)
        dbConn.getConfig().setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new MySqlDataTypeFactory());
        dbConn.getConfig().setProperty(DatabaseConfig.PROPERTY_METADATA_HANDLER, new MySqlMetadataHandler());
        return dbConn;
    }
}

 

由于我的数据库表字段均采用小写,因此

在载入DefaultDataSet时一定要将caseSensitiveTableName属性置为true,这样,就可以运行了

稍后会将代码整理出来一并上传。

时间: 2024-08-08 09:41:37

关于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

DBUnit数据库测试

DBUnit数据库测试: DBUnit是一个基于junit扩展的数据库测试框架.它提供了大量的类对与数据库相关的操作进行了抽象和封装.它通过使用用户自定义的数据集以及相关操作使数据库处于一种可知的状态,从而使得测试自动化.可重复和相对独立.虽然不用dbunit也可以达到这种目的,但是我们必须为此付出代价(编写大量代码,测试及维护),既然有了这么优秀的开源框架,我们又何必再造轮子. 普通的测试数据库的方法不仅较为麻烦,而且在对数据库测试完后会残留数据[学Java,到凯哥学堂kaige123.com

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”这个类去加载数据库

用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.

单元测试工具 unitils

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

玩转单元测试之DBUnit

DBunit 是一种扩展于JUnit的数据库驱动测试框架,它使数据库在测试过程之间处于一种已知状态,如果一个测试用例对数据库造成了破坏性影响,它可以帮助避免造成后面的测试失败或者给出错误结果. 虽然不是什么新鲜货,但最近正好用到,就把学到的跟大家分享一下. 关键词:数据库层测试,DAO层测试,DBUnit教程,DBUnit入门,DBUnit实例,Sring中结合DBUnit对Dao层测试 目录 简介 前提条件 Maven配置 准备工作 实例详解 测试基类 关于数据集 Example 1 Flat

山东大学软件质量保证与测试技术复习纲要

软件质量保证与测试技术复习提纲 1.3  1.5   2.1 2.3 2.5 2.6   3.3(3.3.1    扩展) 3.4 3.7.3  FSM   状态图 状态表   5.1 5.7.1 5.7.2   8.1.1 8.1.5   9.1 9.6 3.3.1    扩展 某研究所重新对其在大学以上学历的职工安排工作.其方针如下:"如果年龄不满18岁,文化程度是大学,若是男性,则一律要求考研究生.若是女性,则分配到研究所办公室任行政干部:如果年龄满18岁但不足50岁,文化程度是研究生,不

Android中测试框架使用简介

测试 好的程序是测出来的. 测试的目的:尽可能多的测试出程序中的bug. 测试分为 黑盒测试:测试业务逻辑 白盒测试:测试逻辑方法.一般是写一段脚本代码,通过脚本代码去调用业务逻辑方法. 按照测试粒度分为: 方法测试:function test   测试某一个方法 单元测试:unit test      测试某一个类或者某一个单元的多个方法 集成测试:integration testv服务器和客户端联合调试,测试的是多个单元. 系统测试 system test      测试的是整个系统的功能,

小爱同学与小冰将实现联合进步

在今天举行的小米AIoT开发者大会上,公布了与微软的一项重要合作落地:元旦前,内置小米小爱同学的手机和已接入小爱开放平台的智能硬件设备,将具有"召唤小冰"的能力.这些设备包括小米全系列手机(内置V3.5或更高版本的小爱同学).小米AI音箱.小米小爱音箱mini.Yeelight语音助手等.小爱同学与微软小冰两个AI"好闺蜜"的联动配合,将为这些设备带来更加丰富的用户体验. 实际上,小米手机用户今天已能够抢先实现该功能.只要对手机上的小爱同学说出口令"召唤小