Dbunit的使用---dataset

DbUnit使用简介 前言:本篇博客是翻译博文,本人是一名初学者,而且并非专业人员,完全出于自我学习的兴趣,以及交流的目的,有任何疑问或者发现错误请及时提醒,万分感谢。 阅读详情

关于IDataSet的使用,目前主要用到了FlatXmlDataSet ,XmlDataSet ,XlsDataset ,CompositeDataSet,ReplacementDataSet

 

FlatXmlDataSet

FlatXmlDataSet 是最常用的一种,文件格式是这样的

<dataset>

<TEST_TABLE COL0="row 0 col 0" COL1="row 0 col 1" COL2="row 0 col 2"/>

<TEST_TABLE COL1="row 1 col 1"/>

<SECOND_TABLE COL0="row 0 col 0" COL1="row 0 col 1" />

<EMPTY_TABLE/>

</dataset>

举例说明用法, 有这样一个xml文件: src\test\resources\dataset\invoke_webservice_log.xml

<dataset>

<dhzx_webservice_local  id="1" visit_date ="[NOW]" status="1" remark="[UUID]" />

<dhzx_webservice_local  id="2" visit_date ="[NOW]" status="1"  />

<dhzx_webservice_log id="1" visit_date ="[NOW]" status="1" serial_number="[UUID]" />

<dhzx_invoke_log id="1" create_date="[NOW]" result="1" log_id="[LOGID]" />

</dataset>

 

Java代码操作xml一般是这样的:

public IDataSet createIDataSet() {

DataFileLoader loader = new FlatXmlDataFileLoader();

IDataSet dataSet = loader.load("/dataset/invoke_webservice_log.xml");

Map<String, Object> replacementObjects = Maps.newHashMap();

replacementObjects.put("[NOW]", new Date());

replacementObjects.put("[UUID]", uuid);

loader.addReplacementObjects(replacementObjects);

return dataSet;

}

解释一下: 这里面用到了FlatXmlDataFileLoader,这个是dbUnit自带的解析dataset文件的利器,非常好用,他还集成了ReplacementDataSet的功能,可以做变量替换 。

一般情况下,用FlatXmlDataSet+FlatXmlDataFileLoader的方式就能解决大部分问题,但是官网推荐使用XmlDataSet,因为字段是由第一行数据决定的,比如表dhzx_webservice_local的第一条数据有A B C三个字段,而第二条数据有A B C D四个字段,最终XmlDataSet还是以A B C三个字段为准,因此使用FlatXmlDataSet的时候一定要保证字段最全的数据在最前面。

 

XmlDataSet

XmlDataSet的xml文件需要使用dtd约束规范(FlatXmlDataSet并没有强制要求,我估计FlatXmlDataSet是它的默认实现吧),因此要先定义一个dtd文件,如下 dataset.dtd

<?xml version="1.0" encoding="UTF-8"?>

<!ELEMENT dataset (table+)>

<!ELEMENT table (column*, row*)>

<!ATTLIST table name CDATA #REQUIRED>

<!ELEMENT column (#PCDATA)>

<!ELEMENT row (value | null | none)*>

<!ELEMENT value (#PCDATA)>

<!ELEMENT null EMPTY>

<!ELEMENT none EMPTY>

 

然后再使用xml文件 ,文件名为dhzx_invoke_local_log.xml (注意其中的dataset.dtd即为上面定义的dtd文件)

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE dataset SYSTEM "dataset.dtd">

<dataset>

<table name="dhzx_invoke_local_log">

<column>id</column>

<column>create_date</column>

<column>result</column>

<column>log_id</column>

<row>

<value>[LOGID]</value>

<value>[NOW]</value>

<value>1</value>

<value>[LOGID]</value>

</row>

</table>

</dataset>

 

Java代码是这样的(文件都存放在 src\test\resources\dataset目录下)

public IDataSet createIDataSet() throws Exception {

InputStream inputStream = this.getClass().getResource("/dataset/dhzx_invoke_local_log.xml").openStream();

ReplacementDataSet dataSet = new ReplacementDataSet(new XmlDataSet(inputStream));

dataSet.addReplacementObject("[NOW]", new Date());

dataSet.addReplacementObject("[LOGID]", logId);

return dataSet;

}

解释一下:这里主要使用了XmlDataSet和ReplacementDataSet ,XmlDataSet就是针对xml+dtd的解析,而ReplacementDataSet就是为了做文件中的标识替换

 

XlsDataSet

XlsDataSet使用excel作为数据源,每个sheet表示一个表,sheet名为表名,第一行为字段名,其它行表示字段值,如下图所示

 

初始化代码如下:

private static IDataSet createDataSet() throws Exception {

XlsDataFileLoader fileLoader = new XlsDataFileLoader();

IDataSet dataSet = fileLoader.load("/datasets/data.xlsx");

ReplacementDataSet replacementDataSet = new ReplacementDataSet(dataSet);

replacementDataSet.addReplacementObject("[NOW]", DateFormatUtils.format(new Date(), "yyyy-MM-dd"));

replacementDataSet.addReplacementSubstring("[UUID]", UUID.randomUUID().toString());

return replacementDataSet;

}

 

CompositeDataSet

 

顾名思义,这是一个组合式的dataset,即它可以把多个dataset组合为一个,而每个dataset对应一个xml,因此也可以说CompositeDataSet可以组合多个dataset的xml

具体例子不再细说,我们可以把图中的4个xml组合为一个,当然这里的4个xml用的式XmlDataset的方式,具体java代码式这样的

public IDataSet createIDataSet() throws Exception{

IDataSet[] iDataSets = new IDataSet[4] ;

InputStream inputStream = this.getClass().getResource("/dataset/dhzx_webservice_local_log.xml")

.openStream();

iDataSets[0] = new XmlDataSet(inputStream);



inputStream = this.getClass().getResource("/dataset/dhzx_invoke_local_log.xml")

.openStream();

iDataSets[1] = new XmlDataSet(inputStream);



inputStream = this.getClass().getResource("/dataset/dhzx_webservice_log.xml")

.openStream();

iDataSets[2] = new XmlDataSet(inputStream);



inputStream = this.getClass().getResource("/dataset/dhzx_invoke_log.xml")

.openStream();

iDataSets[3] = new XmlDataSet(inputStream);



//将4个dataset组合为一个compositeDataSet

CompositeDataSet compositeDataSet = new CompositeDataSet(iDataSets) ;

//将compositeDataSet包装为replacementDataSet,便于进行变量替换

ReplacementDataSet replacementDataSet = new ReplacementDataSet(compositeDataSet);

replacementDataSet.addReplacementObject("[NOW]", new Date());

replacementDataSet.addReplacementObject("[UUID]", uuid);

return replacementDataSet;

}

 

具体就不解释了,代码就是最好的注释

 

ReplacementDataSet

通过以上的几个例子就可以看出来,ReplacementDataSet是做文件中变量替换的,它的构造方法是直接以其他dataset为入参的,构造起来非常方便

 

关于dataset的更详细说明,可参考官方文档: http://dbunit.sourceforge.net/components.html

 

【Python实战解析】从数据爬取到房价预测:一个完整的数据科学项目流程拆解 本文详细拆解了一个完整的Python数据科学项目流程,从爬取长沙二手房数据到房价预测模型构建。通过实战案例,介绍了数据爬取、清洗、可视化及模型优化的关键技巧,帮助开发者掌握Python在数据分析中的应用,提升程序开发能力。 阅读详情

相关推荐

COMSOL新手必看:锂电池仿真从入门到精通的5个实战案例(附模型文件)

本文为COMSOL新手提供锂电池仿真的5个实战案例,涵盖锂枝晶生长模拟、电池热失控预警、SOC估计等效电路模型、电池组液冷系统热管理及SOH衰退模型构建。通过详细步骤和参数设置,帮助用户快速掌握锂电池仿真技术,提升新能源研发效率。附模型文件可直接应用。

wdx01234567的博客 261

DbUnit 简介

   本文主要为对dbunit getting started 简单理解,其他参考文章见文末。 1. 为什么要用DbUnit       dbunit(官网:http://www.dbunit.org/)是一种扩展于JUnit的数据库驱动测试框架,它使数据库在测试过程之间处于一种已知状态,如果一个测试用例对数据库造成了破坏性影响,它可以帮助避免造成后面的测试失败或者给出错误结果。这...

阿溜的专栏 794

Zemax实战:20×超高清变焦镜头设计全流程解析(从架构到制造)

本文详细解析了使用Zemax软件设计一款20倍变焦比、恒定F2.8光圈8K超高清镜头的全流程。从应对恒定光圈、宽光谱与8K解析力三大挑战的初始架构规划,到构建多重组态模型、分七阶段进行像差优化与公差分析,最终跨越制造鸿沟,为广播级影视与高精度工业检测应用提供了实战指南。

sun99的博客 552

dbunit 入门

DbUnit(http://dbunit.sourceforge.net/ ) 则是专门针对数据库测试的对JUnit 的一个扩展。使用 DbUnit 的步骤: 1、导入jar包 (1)dbunit.jar(可以从http://sourceforge.net/ 这个网站下载) (2)slf4j.jar(可以从 Hibernate 的压缩包中找到) 2、创建 dbunit 的测试数据 xml 文

李威威的博客 4694

python 爬虫 xpath 存储到数据库

参考

我是张先生 1292

高级电机控制场景实例:基于Simulink的永磁同步电机基于Luenberger观测器的弱磁控制仿真

本文基于Simulink实现表贴式永磁同步电机(SPMSM)的Luenberger观测器弱磁控制仿真,通过构建“观测-弱磁-控制”协同逻辑,突破传统矢量控制的基速限制。利用线性化模型设计观测器实时估计电流与磁链,结合电压极限约束动态注入负d轴电流,实现转速扩展至12000rpm(4倍基速),弱磁区电流THD低于3%,动态响应时间小于5ms,验证了高速运行下系统稳定性与鲁棒性。附完整建模步骤、MATLAB函数代码及性能分析,适用于电动汽车、机床等高速驱动场景,为高级电机控制提供可复现的技术范式。

amy_mhd的博客 32

DBUnit导出数据库的中文问题

DBUnit在导出数据库记录时,默认情况下采用的是\”UTF-8\”编码,因此会导致乱码。我在mysql和oracle下分别做了试验,如果是用java application,针对mysql的url字串需要指定编码格式,比如: jdbc:mysql://127.0.0.1/test?useUnicode=true&characterEncoding=GB2312 而对于oracle,则

jack_one的专栏 1384

SQL的基本介绍

1.什么是数据库?2.什么是数据库管理系统?3.什么是 SQL?1.数据库是保存有组织的数据的容器,通常是一个文件或一组文件,可以将其看作电子化的文件柜。用户可以对文件中的数据执行新增、删除、更新、查询等操作。2.数据库管理系统是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户可以通过 DBMS 访问数据库中的数据,数据库管理员也可以通过 DBMS 进行数据库的维护工作。

shiwei0813的博客 2879

单元测试---dbunit数据集的选择与使用

对于增删改方法的单元测试,推荐使用dbunit+springtestdbunit的方式编写单元测试。我们使用connection.createDataSet()生成IDataSet对象,利用IDataSet对象生成我们需要的数据集文件,dbunit支持多种数据集,查看dbunit.jar源码可以看到,在org.dbunit.dataset包下,有生成数据集的工具类,dbunit支持以下几种常用的数据

java开发常遇到的问题 2701

基于转录逆转的药物重定向 GPS 模型

GPS是一个基于分子结构预测基因表达扰动的开源平台,由三个模块组成:RCL(在LINCS扰动数据上训练抗噪MLP)、GPS4Drugs(预测新化合物的基因表达谱并进行逆转评分)、MolSearch(基于MCTS的分子优化)。平台使用Morgan指纹和Gene Ontology注释作为特征输入,将基因表达扰动离散为三分类标签。训练数据来自LINCS Phase I的18,746个化合物和978个landmark基因,支持四细胞系独立训练,可用于药物重定向与化合物筛选。

听雨草堂 84

JEDEC 标准半导体功率循环热阻测试(JESD51 系列)

【代码】JEDEC 标准半导体功率循环热阻测试(JESD51 系列)

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 471

使用Dbunit+Unitils出现 org.dbunit.dataset.NoSuchColumnException 的解决方法

最近使用dbunit-2.4.8 + Unitils 3.3做DAO层数据库测试的时候 出现如下错误:   org.unitils.core.UnitilsException: Error inserting test data from DbUnit dataset for method public void org.zfanxu.test.UserDaoTestWithUnitils....

该写点东西了 1769

OpenClaw实战五|企业文档AI助理:对接内部知识库+自动答疑+文档生成,员工自助查资料零等待

企业最大的隐性成本,不是设备、不是房租,而是内部知识的混乱与流失。OpenClaw企业文档AI助理,本质是给企业做了一个7×24小时在线、永不疲倦、精准无误、自动更新的内部知识管家。它不替代HR、行政、IT,而是把他们从无穷无尽的重复问答、机械文档编写里解放出来,去做更有价值的管理、服务、优化工作。对中小企业来说,不用买昂贵的知识库系统、不用招开发、不用做复杂集成,一台私有化服务器,两天就能落地,性价比拉满。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 150

DBUnit与Ant使用

初次使用ant+DbUnit,用ant可以实现,也可以直接写DbUnit的测试代码可现。 dataset.xml 代码:       firstname=Sager     lastname=Xiao />       firstname=Cheung     lastname=Zhang />       firstname=Sword     la

kaukiyou的专栏 1269

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

dbunit之org.dbunit.dataset.DataSetException: java.net.MalformedURLException解决方法

一、问题定位    在使用dbunit做DAO的单元测试时,抛出了一个org.dbunit.dataset.DataSetException: java.net.MalformedURLException异常,如下图, 可以看到问题出现在我写的TestDbUnit的49行,再看源代码 第49行是这一句 IDataset ds = new FlatXmlDataSet(file

传a奇—学习博客 4766

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

org.dbunit.dataset.NoSuchColumnException: t_role.ROLE_TYPE - (Non-uppercase input column: role_type

dbunit有一个大大的BUG,即会解释不了MySQL表的结构,在使用@DataSet准备数据时,会抛出类似如下的异常:  使用dbunit来测试Dao时,如果使用hibernate作为持久层会出现org.dbunit.dataset.NoSuchColumnException: t_role.ROLE_TYPE -  (Non-uppercase input column: role_ty

追梦人的博客 4088

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

dbunit入门 (一)基础实例

1. 首先导入包。 在pom.xml中加入依赖 [code="xml"] org.dbunit dbunit 2.4.9 test [/code] 此时会导入三个包, dbunit, slf4j和commons-collections 2.创建dbunit的数据xml文件 dbunit在创建数据库的时候是根据我们的数据xml...

···· 694

Appfuse,Oracle出现 NoSuchTableException错误的解决

引言: 最近,我根据Appfuse的文档,学习配置在appfuse上使用oracle数据库。在设置过程中出现了错误org.dbunit.dataset.NoSuchTableException,几经周折,终于解决,记录下来,供参考。 Appfuse版本:1.9.3 Oracle版本:9.2 Appfuse,Running On Oracle时出现NoSuchTableException错误的解决

航海日志 951

测试Spring Data JPA的repository

测试Spring Data JPA的repositorySpring Data JPA的repository都是接口,怎么测试呢?这篇文章就回答这个问题,我们测试选择TodoRepository中的findBySearchTerm()方法作为例子获取maven依赖依赖的pom文件如下:<dependency> <groupId>junit</groupId> <artifactId>

RO_wsy的专栏 5954

DBUnit扩展自定类型实现

         首先,要扩展DBUnit支持的数据类型,我们必须知道,自己要扩展的数据类型的一些工作情况: a)驱动程序为该列返回什么JDBC类型; b)驱动程序为这些对象返回什么Java类; 要解答上面的问题,我们可以用下面的方法来进行测试: Public class PrintMetaData{ public static void main(String[] args) t...

clarityblack的博客 262

Spring Boot 与DBunit 配合使用

DBUnit 快速上手 Springboot 添加 DBunit 依赖 // https://mvnrepository.com/artifact/org.dbunit/dbunit testCompile group: 'org.dbunit', name: 'dbunit', version: '2.5.4' 编写Test.java...

weixin_33857679的博客 488

dbunit使用

1.dbunit从名字上可以看出,是对有关数据库操作的测试。官网:www.dbunit.org从官网下载dbunit相关的jar包,dbunit还依赖于http://www.slf4j.org和commons-logging.jar,所以也需要下载slf4j,使用它的slf4j-api-1.5.3.jar和slf4j-jcl-1.5.3.jar。 dbunit的原理是:它会把数据库表里的

luoyuchuan的专栏 935

DbUnit 简介和使用 (puts your database into a known state)

DbUnit简介1.      引言在写持久层测试用例的时候,由于我们的测试是要依赖于外部的数据库,数据库里面的数据影响我们测试,往往是要在数据库中去查询得到数据表数据的状态,然后才能在TestCase里面写断言。数据表的状态又是可变的,所以经常要在此来回切换。可能产生如下场景:1)        

abing37的专栏 3359

dbunit java_java – org.dbunit.dataset.NoSuchColumnException

我运行测试时遇到以下错误:org.dbunit.dataset.NoSuchColumnException: myTable.MYFIELD - (Non-uppercase input column: myfield) in ColumnNameToIndexes cache map. Note that the map's column names are NOT case sensitiv...

weixin_39983912的博客 676

遭遇org.dbunit.dataset.NoSuchTableException

今天在做测试代码的时候发现如下错误org.dbunit.dataset.NoSuchTableException说我找不到我要提交的表,但是反复检查数据源,schema的名字,还有表名称都是正确的.....最后发现dbunit对SCHEMA的名字要求,居然必须是大写.可谓是不小的bug.

测试开发这些事 5212

dbunit mysql bug no_dbunit经典的NoSuchColumnException解决之道

抱怨来了dbunit这么多人用,这个项目居然好像没有人在维护了,自动2012年9月release一个版本后,再没有更新了,寒心啊。dbunit有一个大大的BUG,即会解释不了MySQL表的结构,在使用@DataSet准备数据时,会抛出类似如下的异常:Caused by: org.unitils.core.UnitilsException: Error while executing DataSet...

weixin_39860280的博客 528
上一篇: spring-boot如何得到一个tomcat实例(基于spring-boot_v1.5.14.RELEASE)
下一篇: 在centos上安装fastdfs+nginx(单机版)
五克松
博客等级 码龄17年 4粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值