zoukankan      html  css  js  c++  java
  • 关于unitils联合dbunit的测试

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

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

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

    image

    数据库脚本如下:

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

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

  • 相关阅读:
    手机端局部滚动问题 overflow-y:auto|scroll无效,使用iscroll解决
    h5 js 图片预览并判断 ajax上传
    安装一些包管理的记录 win10
    nginx php rewrite配置
    记一次u盘 无法格式化、0字节、写保护的解决过程
    erlang,elixir安装
    Redis详解:lists数据类型及操作
    redis类型[string 、list 、 set 、sorted set 、hash]
    java 生成Word文档
    mysql 获取当前月最后一天和第一天
  • 原文地址:https://www.cnblogs.com/luhouxiang/p/5178673.html
Copyright © 2011-2022 走看看