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,这样,就可以运行了

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

关于unitils联合dbunit的测试的更多相关文章

  1. Unitils集成DBUnit、Spring-单元测试

    Unitils集成DBUnit.Spring-单元测试 1.maven-pom文件中引入相关jar包 <!-- Unitils -dbunit.Spring --> <depende ...

  2. Unitils集成DBUnit、Spring-单元测试(转)

    1.maven-pom文件中引入相关jar包 <!-- Unitils -dbunit.Spring --> <dependency> <groupId>org.u ...

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

    Unitils在集成DBunit时,如果数据库是mysql时,就会出现一些如下: org.unitils.core.UnitilsException: Error inserting test dat ...

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

    <Spring 3.0就这么简单>.(陈雄华,林开雄)第8章,对如何用Unitils进行测试简单介绍,下面是我用Unitils进行单元测试过程中遇到的问题的总结. 1.设置好pom.xml ...

  5. 使用Unitils测试DAO层

    Spring 的测试框架为我们提供一个强大的测试环境,解决日常单元测试中遇到的大部分测试难题:如运行多个测试用例和测试方法时,Spring上下文只需创建一次:数据库现场不受破坏:方便手工指定Sprin ...

  6. 测试整合之王Unitils

    16.4.1  Unitils概述(1) Unitils测试框架目的是让单元测试变得更加容易和可维护.Unitils构建在DbUnit与EasyMock项目之上并与JUnit和TestNG相结合.支持 ...

  7. dbunit进行DAO层Excel单元测试

    DAO层测试难点 可重复性,每次运行单元测试,得到的数据是重复的 独立性,测试数据与实际数据相互独立 数据库中脏数据预处理 不能给数据库中数据带来变化 DAO层测试方法 使用内存数据库,如H2.优点: ...

  8. 单元测试工具 unitils

    Unitils模块组件 Unitils通过模块化的方式来组织各个功能模块,采用类似于Spring的模块划分方式,如unitils-core.unitils-database.unitils-mock等 ...

  9. 基于dbunit进行mybatis DAO层Excel单元测试

    DAO层测试难点 可重复性,每次运行单元测试,得到的数据是重复的 独立性,测试数据与实际数据相互独立 数据库中脏数据预处理 不能给数据库中数据带来变化 DAO层测试方法 使用内存数据库,如H2.优点: ...

随机推荐

  1. 贪心(哈夫曼树):HDU 5884 sort

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA2QAAAKACAIAAAB8KCy/AAAgAElEQVR4nOy9a5Adx3UmWL+kHxuekU ...

  2. Lowest Common Ancestor of a Binary Tree——Leetcode

    Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According ...

  3. HDOJ(HDU) 2524 矩形A + B(推导公式、)

    Problem Description 给你一个高为n ,宽为m列的网格,计算出这个网格中有多少个矩形,下图为高为2,宽为4的网格. Input 第一行输入一个t, 表示有t组数据,然后每行输入n,m ...

  4. HDOJ 1716 排列2(next_permutation函数)

    Problem Description Ray又对数字的列产生了兴趣: 现有四张卡片,用这四张卡片能排列出很多不同的4位数,要求按从小到大的顺序输出这些4位数. Input 每组数据占一行,代表四张卡 ...

  5. 待解决)leetcode 路径和 dfs 线序遍历

    Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given su ...

  6. 【C++】冒泡排序、插入排序、快速排序

    #include<iostream> using namespace std; void BubbleSort(int *a,int istart,int len)//冒泡排序 { //a ...

  7. 3D FPS游戏中Player摄像机的运动

    最近遇到一些类似3D FPS的game play.针对这里面Player摄像机的运动的问题,随便总结一些东西以备参考.首先,对问题做一些的假设: Player摄像机在多数情况下在场景中的位置是固定的, ...

  8. 常用的MySQL图形化管理软件

    本博文的主要内容有 .SQLyog软件的安装.下载和使用 .Navicat for MySQL软件的安装.下载和使用 1.SQLyog软件的安装.下载和使用 2.Navicat for MySQL软件 ...

  9. mysql创建数据库(指定编码)

    如下脚本创建数据库yourdbname,并制定默认的字符集是utf8. CREATE DATABASE IF NOT EXISTS yourdbname DEFAULT CHARSET utf8 CO ...

  10. SQL 按月统计(两种方式) 分类: SQL Server 2014-08-04 15:36 154人阅读 评论(0) 收藏

    (1)Convert 函数 select Convert ( VARCHAR(7),ComeDate,120) as Date ,Count(In_code) as 单数,Sum(SumTrueNum ...