论坛首页 综合技术论坛

DBUnit实践

浏览 19843 次
锁定老帖子 主题:DBUnit实践
精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-05-21  
       经过下午和晚上的摸索,基本上已经搞定了DBUnit。说实在话,我觉得DBUnit比较简单,如果我去设计的话,应该也能够设计得比较好。不过,我只对MYSQL, HSQLDB稍微熟悉一点,其它的数据库就不行了
      
       好了,闲话少说。

       在开始DBUnit实践之前,我调查了相关的DBUnit的资料,调查了一些做DAO测试的观点和看法。
      
  1. 目前,最有效的方法是利用脚本来重建数据库。测试前去drop表,然后create表,然后再进行测试。
  2. 每一个开发人员需要搞一个数据库实例。不能公用一个数据库。单元测试数据库最好和开发数据库分开。HSQLDB内存数据库值得尝试(我不推荐)。
  3. 使用springAbstractTransactionalDataSourceSpringContextTests。在每个testcase开始之前,会自动开启一个事务,然后在结束的时候进行事务回滚。这样就可以隔绝几个测试用例之间的相互干扰。这很重要,才能够实现测试的自动化。

  4. 测试DAO不如连数据库一起测试吧。因为DAO测试的目的不是DAO接口实现对不对,而是测试是否如你预期的发送了SQL,如你预期的返回了结果集。这个时候你Mock之后,测试就没有意义了。
  5. 在SpringSide中,利用DBUnit提供的数据库准备和回收工作,提供三种数据库连接配置,采用Excel为数据源,提供两种数据库的配置和回收的应用策略。(我看过源代码了,相当简单,对DBUnit进行了下封装,把自己想要的功能给提取出来了,感谢。)

    上述观点和做法,对我实践DBUnit有很大帮助。最后,去DBUnit站点,读了一下关于DBUnit的Core Component部分,其实就三部分:
  1.     DataSet: 这个是我们需要准备的测试数据。
  2.     DatabaseOperation: 对数据库的操作,有几种不同的操作,文档写得比较清楚。
  3.     DataBaseConnection:需要持有对数据库的Connection,以便执行各种操作。
     DBTestCase extends TestCase,DBTestCase的源代码写得比较清楚,看看就明白了。它就是在SetUp的时候,执行定义好的数据库操作;在TearDown的时候,同样也是执行数据库操作就OK了。

     应该说:DBUnit这个框架其实相当简单。如果我们对Junit比较熟悉的话,应该很快就可以上手的。


    具体到自己的项目,我认为需要注意几点:
    1. 写一个基TestCase,将测试数据库的配置信息给写好。不用在每个Sub TestCase中去写这些东西。直接继承JdbcBasedDBTestCase就可以了。(不过这个类也没有提供多少东西,也无所谓了)
    2. 对于每个Sub TestCase,需要的DataSet文件,需要单独建立data文件。组织这种文件的方式需要我们写好。Sub TestCase中,直接返回FlatXmlDataSet就可以满足要求。
    3. EXCEL文件不是很好用。我用EMS MYSQL MANAGER导出xls文件后,运行单元测试老是报DataType转换错误。DATE类型似乎转换是有问题的。
    4. 速度不快。因为要配置实体工具,得花一段时间。还要改变datasource.xml以及hibernate.cfg.xml文件,不是很方面。这也能看出来,实体工具的性能不行。
   
    好了,以后可以用DBUNIT来做DAO测试了,何乐而不为。以前,我总是写很多测试方法,都放在Transaction中,最后回滚,现在不用写那些代码了。不错。

    附:
           DBUnit相关资料:

   
   发表时间:2007-05-31  
不错,但是用dbunit很多时候断言比较困难,您不觉得吗?
0 请登录后投票
   发表时间:2007-06-07  
我一般不用DBUnit自己的AssertEquals方法,而是直接用的JUNIT的AssertEquals。
如果有需要的话,我把自己做的DBUnit工程给大家发上来,可以参考下。

一根筷子 写道
不错,但是用dbunit很多时候断言比较困难,您不觉得吗?
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics