随笔-55  评论-208  文章-0  trackbacks-0
昨天在公司内部开会,分享我的单元测试经验,当我在提到有关dao的增删改操作一般是直接使用HibernateTemplate的相关方法,所以没有必要对相关dao方法进行测试时。
public void saveComment(CsComment comment) {
        getHibernateTemplate().saveOrUpdate(comment);
    }

就此引发了一场争论,有同事提出疑问说,为什么不需要对增删改方法进行测试,增删改方法也是DAO中一个具体实现功能,那么针对于这个功能就应该进行测试。

对于这个问题,我的理解是,首先应该明确单元测试的目的是什么,究竟是测试功能,还是测试代码
如果要测试功能,那么一个功能应该是纵向的,dao,bl,action都会有相应的增删改方法,那么3者之间的测试又有什么不同呢?
所以,单元测试,就是在检测你的代码,如果你的一个方法只是简单的对其他的方法调用,如上面这个方法,那么我认为就没有必要花费这个代价来进行单元测试,我们不是为了写测试代码而写单元测试,单元测试保证的是我的代码质量,不是在测试我的功能。功能测试是由相应的功能测试来完成。
posted on 2007-02-07 14:41 rocket 阅读(2244) 评论(10)  编辑  收藏

评论:
# re: 单元测试究竟是测试什么? 2007-02-07 14:46 | 交口称赞
不要拘泥于理论
代码的目的还是实现功能

俺的看法是
测你想测的
测你最不放心的
测最重要的

我觉得单元测试最主要的是让我放心,
半年以后改了A、跑跑下测试没问题

我就很自信我不放心的、我关心的B、C、D都没问题  回复  更多评论
  
# re: 单元测试究竟是测试什么? 2007-02-07 15:13 | rocket
@交口称赞
当然不是为了理论,我使用实践的经历来说明。
我在一开始也会为增删改等方法编写单元测试,但是在项目进行中我发现这样的测试是没有意义的,只是在浪费我紧张的项目时间。

就你的例子来说,如果你没有改动你的实现代码,那么你的bcd是不可能出现问题的。如果你改动了A实现代码,bcd出现了问题,那么要们是你的程序耦合过高,要么是你的方法需求发生的变动。
单元测试就是在测试你的实现代码,如果要是从功能点来看的话,一个功能点的实现将是纵向的。而不是一段代码能够完成的事情。  回复  更多评论
  
# re: 单元测试究竟是测试什么? 2007-02-08 09:12 | 交口称赞
程序耦合过高
到不一定。。。。。。。。。
A提供给BCD用的呢

在一开始也会为增删改等方法编写单元测试,但是在项目进行中我发现这样的测试是没有意义的,只是在浪费我紧张的项目时间。
同意啊,
CRUD方法如果都是继承出来的,真没必要去测。。。。。。。。
偶们现在就不测他  回复  更多评论
  
# re: 单元测试究竟是测试什么? 2007-02-08 10:01 | DoubleHeart
应该从Service层开始测起。  回复  更多评论
  
# re: 单元测试究竟是测试什么? 2007-02-08 14:16 | cjsteven
应该还和你的单元范围有关  回复  更多评论
  
# re: 单元测试究竟是测试什么? 2007-02-08 14:51 | hgq0011
我一般从action,service,bl,dao层一起测试,那样一个功能就测试完了。我最不喜欢的是从客户端(IE)来测,那样测试真痛苦(有时重启一下服务要等,慢呀)。  回复  更多评论
  
# re: 单元测试究竟是测试什么? 2007-02-21 00:51 | sunflower
个人觉得使用JUnit就测一些关键的算法方法,其他测的没必要.
重起一下tomcat花不了多长时间,看内存的多少了.如果3层都测的话真的很浪费时间.主要还是测bl层.^-^  回复  更多评论
  
# re: 单元测试究竟是测试什么? 2007-02-21 01:08 | sunflower
还有不想依赖第3方的JUnit包,这样会增加测试代码的藕合性.
个人觉得.^-^  回复  更多评论
  
# re: 单元测试究竟是测试什么? 2007-03-15 09:11 | rocket
@sunflower
不用工具你怎么模拟容器,请用实践说话,呵呵,不要空谈  回复  更多评论
  
# re: 单元测试究竟是测试什么?[未登录] 2011-11-16 21:05 | 王辉
单元测试是在测逻辑,包括条件判定,循环等。博主的这段代码不包括任何逻辑,当然不需要用单元测试去覆盖。  回复  更多评论
  

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


网站导航: