DBUnit入门级教程

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

DBUnit数据库单元测试前言(出生地和原因)DBUnit是Junit家族中的一员,是专门用来测试数据库的工具。本文将对其应用进行一个简单的介绍,帮助学习使用该工具。DBUnit是对Junit的一个扩展,提供测试子类TestCase(对接触过Junit的人比较熟悉,如果没接触过,只要记住这个类名称就可以了),其关键类继承了Junit的TestCase,并对其函数进行了重写和接口扩展工作,为对数据库的测试提供了很大的便利。概述(DBUnit的便利)在数据库测试中,主要是测试程序中写的Query语句是否正确执行的工作。在以前的实际应用中,在自己进行测试时,需要自己写入数据,执行后需查看数据是否正确,清理不正确数据,然后继续修改数据,已完成Query的正确性。如果使用数据库IDE可能还会方便一点,但是其简单却繁琐的工作会耽误很多时间。DBUnit则会帮助你完成这一部分对数据库数据的操作,即提供单元测试框架,并帮助测试者完成对数据的自动写入、正确性验证、数据清理等工作。当然,你也可以完全脱离测试的目的,使用其里面的方法完成一些其他工作(如数据库数据的自动载入、备份等)。准备(用到的jar包)使用前除了必须的Junit库之外,还需要其他几个包。如图1.0图1.0jar包DBUnit使用了一些日志功能,所以需用到后三个包内的一些方法。核心(大量的xml文件)既然要对数据库进行自动载入、验证等工作,则必须需要数据。但是数据从哪里来,这是使用前必须了解的事情。一些使用DBUnit很长时间的程序猿会评价到:DBunit很好用,就是对xml文件的操作太多。从这句话就可以看出,xml文件对该工具的重要性。没错,我们的数据来源就是xml文件。一般情况下,对于一个用例,会用到两个xml文件:Query执行前数据库数据和正确执行后的数据库数据。当然,你也可以加一个数据库备份数据文件,随人而定。不过在这里提出xml文件可能会对初学者有些干扰,不过不用急,图1.1会先介绍用到的xml的文件结构,还有你只要先知道这些结构并记住,数据都是来自这些文件即可。图1.1xml文件结构解释:该文件描述了一个名为Employee的表以及其数据。其中含有五列employee_uid、first_name、last_name、start_date、em_id。其对应的数据就为双引号中的数据(数据类型需与数据库中定义的数据类型相同),当然,数据库中必须有和这些项相对应的数据库表。datasetdataset/标签中即为数据库的所有内容,EMPLOYEE/即为表名,而里面的紫色部分为项名。测试前工作:1.准备实体类与正常的数据库访问是一样的,需要先创建实体类以及数据库表图1.2为简单的一个实体类样本。图1.2实体类Employee2.准备数据库接口类如图1.3数据库接口类中,简单封装了一些基本的数据库操作,在各个方法中,都有需要被测试验证的Query语句。(本次测试中,作者使用的是H2数据库,看到陌生名称的同志们不要怕~)在作者写的代码中,也直接封装了对数据库的链接,主要是为了监测实时数据库的状态。在使用DBUnit测试时,并不需要这些链接。图1.3接口类开始测试(DBunit的实际使用)注:初次接触Junit框架的朋友,首先要先了解一个特点,Juint框架中的TestCase接口。其中已经包含了主函数入口main方法,故,只需要在继承TestCase的类中进行测试用例的编写,直接运行即可,无需外部调用方法。1.一个测试基类使用DBUnit测试时,需要创建一个基类,该将在该基类中进行所有用例的测试。首先基类需继承DBUnit的扩展接口DBTestCase。如图1.4图1.4基类2.重写四方法1)获取数据库链接的方法IDatabaseTesterDBUnit一共提供了四种连接数据库的方式,本文只介绍了一种JDBC链接的方式,有需求或是兴趣的可以去了解其他三种。具体获取连接的方法如图1.5所示图1.5IDatabaseTester方法,通过JDBC获取链接当然,IDatabaseTester并不是只有来获取数据库链接的,其他作用将在后面介绍。、2)载入测试数据方法getDataSet()用来载入测试用数据的方法如图1.6,其中preXmlFile为String类型的xml文件地址图1.6getDataset载入测试数据3)载入前数据库操作getSetUpOperation()该函数是用来选择在载入测试数据前,需对数据库进行的操作,返回的是DatabaseOperation对象类型如图1.7所示默认为CLEAN_INSERT(具体意思以及参数后面介绍)图1.7setupOperation方法4)载入后数据库操作getTearDownOperation用来定义在进行测试后对数据库的处理,默认为NONE,即什么也不做如图1.8图1.8执行测试后删除测试数据备:图1.9所示为部分操作功能和定义,还有部分功能未列出,实际效果待验证3.编写测试用例在基类里面进行测试用例的编写,样本如图2.0所示图2.0简单测试用例解析:新建IDataSet对象,通过父类中写好的getConnection函数,获取链接,并返回数据库的数据集。在获取的数据集里,通过ITable对象获取目标名称的表的数据。通过IDataset对象,并从外部使用FlatXmlDataSet对象来获取外部xml文件的期望数据集,其中expXmlFile为外部期望数据的xml文件地址。同样,通过ITable获取数据表中的具体某个表数据(相对文件中的数据而言)接下来,使用封装好的Assertion’对象中的AssertEquals方法,传入两个ITable数据,一个为当前数据库的测试数据,一个为期望数据样式的数据,通过断言比较两份数据是否相同,来进行验证。4.其他功能使用DBUnit进行测试的最主要思想就是,通过测试用例,使用待测Query对准备好的数据库数据进行操作,之后将获取的结果数据库与期望数据库值进行断言比对,以判断是否正确。因此,大部分的测试步骤与上节2.0图所示相差无几,只存在一些小地方的改动。图2.1为更新测试代码图2.1更新测试代码可以看到,除了对数据库进行操作的步骤除外,其他与图2.0无相差。注:在对数据库进行操作时,一定要在取数据集之前进行。1)忽略某行查询通过使用额外配置的工具方法,可做到忽略或者只包括某些数据列的操作2)数据库排序测试使用额外工具方法,对数据库查询结果,按字段排序的测试3)条件获取数据集和写出文件的测试该例子主要测试了工具方法QueryDataSet来获取指定数据表中,通过Query语句查询到的数据集,并将数据集输出到文件外部的过程。当然,这两部分不是必须放在一起使用的,是完全可以分离的。5.可选重载方法1)setUp方法setUp可作为可选重载,是用来执行数据的装载任务的。可通过重载该方法来进行数据重载前的一些工作。比如对原数据库数据的备份操作等。2)teardown方法可用来进行卸载前或者卸载后的操作6.后话a)不要企图继承DBTestCase后对构造方法进行重写,因为DBTestCase已经写死了!b)测试数据库,并不是一定要继承DBTestCase,也可以直继承用TestCase进行测试,其更灵活,也意味着你要做的工作更多:自定义数据库准备操作、自己定义断言方法等等等…..c)在TestCase中仍然添加了选项工具类IDatabaseTester。可以通过DBTestCase中的newDatabaseTester获取,当然,前提是你已经在里面定义了数据库链接了。d)IDatabaseTester是一个包含了测试过程中要进行内部参数调整时需要用到的方法,可以设定setUp参数、tearDown参数、执行setUp、执行tearDown、设定链接参数等等如下图为其部分关系和方法。

1 / 10
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功