论坛首页 Java企业应用论坛

数据驱动测试(一) – 开篇

浏览 5688 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2014-02-06   最后修改:2014-04-13
数据驱动测试(一) – 开篇

(Note: 本篇讨论的是基于数据库的系统的单元测试问题)

这个话题说起来应该是一个老生常谈的话题了,再开此帖是想与大家探讨大家的处理方式,同时也来验证我们团队4年来的做法是不是可以有更多的改进。

在实践的过程中,很多项目并不能有效地坚持单元测试,即使书写了,也不能够持续也去维护这些单元测试,最后,这些单元测试代码将被废弃不再使用。长此以往,团队将不再愿意去写单元测试。

咎其原因,在我看来最重要的不外乎两点。

第一点,也是最重要的一点,团队并没有意识到书写单元测试是一件非常有必要,有意义,有价值的事。这个话题就不展开探讨了,网上一搜一大把。在这里,我分享我最最最喜欢的一句话:越好的单元测试会让我们的老板和我们自己能够睡得越踏实。
第二点,单元测试比较麻烦,编写单元测试麻烦,维护单元测试麻烦。

以我实际工作的经验来看,第二点是确确实实存在的,说是麻烦,还是比较客气的,有的时候在受压于项目进度和项目成本的情况下,几乎可以用做不到来形容。

举两个例子来说明
1. A表的STATUS字段从PENDING改成ACCEPTED
2. 关连A, B, C, D表后实现查询功能

大家会怎么做?
大家的项目中会对这两种情况进行完整的单元测试,并有效地维护了这些单元测试用例吗?

我们项目的做法是
1. 准备数据
2. 每次跑单元测试之前导入这些数据
3. 跑完单元测试之后清理这些数据

欢迎大家一起探讨,特别是结合自己项目中的实际情况一起探讨。

我在接下来的文章中也将我实际使用的方法和工具和大家分享。

大体思路是设计一个工具能基于具体的业务需求方便地准备数据,从而能让单元测试在这些数据的基础上能够有效和低成本地实现。

工具的设计要求是:
1. 能方便地设计和准备测试数据
2. 在数据库变更的情况下能方便地维护已存在的测试数据
3. 测试团队和开发团队都能够方便都使用
4. 所有团队成员之间设计的数据要能够避免冲突

具体实现是:
1. 在Excel中设计数据
2. 能使用一些API在集成工具中导入数据,如Hudson, Ant, Maven
3. 能在图形界面中导入全部或特定测试用例的数据
4. 能自动同步数据库表结构的变更到Excel中
5. 分配指定的主键区间给每一个团队成员

后续话题

[数据驱动测试(二) – 实例] http://www.iteye.com/topic/1133613
数据驱动测试(三) – 使用工具 http://www.iteye.com/topic/1133877
   发表时间:2014-02-07  
从阅读人数来看,对本话题感兴趣的朋友很多啊。

欢迎大家踊跃分享各自的心得
0 请登录后投票
   发表时间:2014-02-10  
楼主,我也遇到了相同的问题,如何使单一的功能,写单元测试就很简单。如果遇到需要和同事共同完成的任务时,写单元测试就比较麻烦了。 楼主你怎么看
0 请登录后投票
   发表时间:2014-03-08  
lanqiu17 写道
楼主,我也遇到了相同的问题,如何使单一的功能,写单元测试就很简单。如果遇到需要和同事共同完成的任务时,写单元测试就比较麻烦了。 楼主你怎么看


既然是“单元”测试,各人之间的测试案例就不该相互影响,不知道你所遇到的麻烦是什么,请详述
0 请登录后投票
   发表时间:2014-03-11  
我们这里是用dbutils做单元测试。

这个框架还是能满足一些基本的功能的,比如数据构造,断言,测试完毕后数据自动回滚等等,也支持多数据源。

当然和楼主的需求可能有一点差距,毕竟只是一个junit扩展框架,没有什么图形页面之类的东西。单纯用来做单元测试的
0 请登录后投票
   发表时间:2014-03-15  
woshiykk1 写道
我们这里是用dbutils做单元测试。

这个框架还是能满足一些基本的功能的,比如数据构造,断言,测试完毕后数据自动回滚等等,也支持多数据源。

当然和楼主的需求可能有一点差距,毕竟只是一个junit扩展框架,没有什么图形页面之类的东西。单纯用来做单元测试的


应该说DBUnit是一个很好的框架,也正是它很早就关注到了为单元测试准备数据。

[url]Why DbUnit[/url] http://dbunit.wikidot.com/whydbunit

I just released the first version of dbUnit, a database testing framework. This is a JUnit extension that sets up your database in a known state before executing your tests. This framework uses xml datasets (collection of data tables) and performs database operations before and after each test. The dbUnit framework supports both the "clean insert" and the "refresh" strategies.
Why?
I was responsible to define the unit testing strategy for a new J2EE project involving databases. I found that Cactus was a great JUnit extension to test EJB components and JSP/servlets but, even with a lot of research, I haven't found any products to set up our database in a consistent state before each test. I also discovered Richard Dallaway website (http://www.dallaway.com/acad/dbunit.html), which I found a very valuable resource. This enlightens me about the various testing strategies for database development (many of them coming from the JUnit mailing list). But at my knowledge, nothing exists yet that facilitates their application. At the end, I decided to do it myself and I created dbUnit!
For more information about dbUnit and to download it, go at http://dbunit.sourceforge.net
Any feedback you may have is welcome and much appreciated. I hope you will find dbUnit a valuable addition for the community.

但是我认为它的便用性上还是有比较大的提升空间。假设准备单元测试数据要花10点力气,DbUnit的出现可以将工作减少到5点力气,但对于工作繁重的程序员来说,还是too much了,我觉得最多只能让程序员花1-2点力气,让省下来的力气回去陪女朋友。
0 请登录后投票
   发表时间:2014-03-15  
其实在这个帖子里,我最想和大家探讨的是如何进行单元测试:)

还是希望大家能不吝分享
0 请登录后投票
论坛首页 Java企业应用版

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