cerulean

DBUnit的使用

DBUnit扩展自JUnit.在使用DBUnit之前,为了验证自己编写的涉及数据库操作方法的正确性,每次都要执行一个简单的sql脚本,灌些数据,然后人眼观察着数据表中的数据.然后,代码执行完毕后,再次观察数据变化情况.久而久之,表里面的数据就变得杂乱,一般会全部删除,重新来过.
    DBUnit的目标正是保证数据库数据环境的稳定性,具备将数据库中数据与xml文件之间双向转换的能力.
试验了一下,

首先,下载dbunit的jar包,加入工程即可.
1.从xml中将数据导入数据库表
tc不再继承自TestCase,而是继承DatabaseTestCase
覆盖几个方法,包括获得xml文件内容,获得DB连接,以及在setup方法和teardown方法中调用提供的dbunit操作类型,构建数据库内数据环境.

这时,我以为如果只有几个简单的数据,写xml固然简单,但想测试大数据量时(虽然UT主要是测试功能而非性能,但是大数据量也方便验证)就有点问题,好在是双向的,可以先把数据用function灌入数据库,再导进xml里面:

2.从数据库表数据导入xml文件
    用ant+DBUnit来完成这个任务非常方便!

< target  name ="export" >
        
< taskdef  name ="dbunit"  classname ="org.dbunit.ant.DbUnitTask"  classpathref ="compile.path"   />
        
< dbunit  driver ="com.mysql.jdbc.Driver"  url ="jdbc:mysql://127.0.0.1:3306/mydb"  userid ="root"  password ="root"  supportBatchStatement ="true" >
            
< export  dest ="${test.srcpath}/export.xml" >                 
                
< query  name ="test_table"  sql ="SELECT * FROM test_table"   />         
                
< table  name ="user_table"   />
            
</ export >
        
</ dbunit >
    
</ target >


    疑问,看到有人说DBUnit在清除数据时,有时不能彻底,原因是分析不出来外键等表之间的约束.因为在试验中采用的数据库里没啥表之间的约束,所以还没有体会到.

    DatabaseTestCase类提供了两个方法来控制测试前和测试后的数据库状态:getSetUpOperation() 和 getTearDownOperation().       
    一种高效的实施方案就是让getSetUpOperation()方法执行REFRESH操作,通过这个操作,我们可以用种子文件中的数据去更新目标数据库里的数据。
    接下来,就是getTearDownOperation(),让他去执行一个NONE操作,也就是什么也不执行
    常用操作:
    DatabaseOperation.CLEAN_INSERT; 先删除表中所有,再插入准备的数据
    DatabaseOperation.REFRESH; 使用准备数据更新表,存在则update,不存在则insert
    DatabaseOperation.DELETE;  只删除准备的数据
    DatabaseOperation.NONE;  啥都不做

posted on 2007-03-20 20:59 cerulean 阅读(1796) 评论(0)  编辑  收藏 所属分类: JavaTesting Related


只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问  
 

导航

<2007年3月>
25262728123
45678910
11121314151617
18192021222324
25262728293031
1234567

统计

常用链接

留言簿(3)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜