读书人

[转]怎么控制单元测试的粒度

发布时间: 2012-10-19 16:53:37 作者: rapoo

[转]如何控制单元测试的粒度?

单元测试的粒度问题一直是软件开发社区面临的现实问题,最近,陈皓针对StackOverflow上的老问题做了总结,并发表了自己的看法,读者在随后的评论中也进行了讨论。

John Nolan在《How deep are your unit tests?》中问道:

TDD需要花时间写测试,而我们一般多少会写一些代码,而第一个测试是测试我的构造函数有没有把这个类的变量都设置对了,这会不会太过分了?那么,我们写单元测试的这个单元的粒度到底是什么样的?并且,是不是我们的测试测试得多了点?

最佳答案是:

老板为我的代码付报酬,而不是测试,所以,我对此的价值观是——测试越少越好,少到你对你的代码质量达到了某种自信(我觉得这种的自信标准应该要高于业内的标准,当然,这种自信也可能是种自大)。如果我的编码生涯中不会犯这种典型的错误(如:在构造函数中设了个错误的值),那我就不会测试它。我倾向于去对那些有意义的错误做测试,所以,我对一些比较复杂的条件逻辑会异常地小心。当在一个团队中,我会非常小心的测试那些会让团队容易出错的代码。

最让人意外的是,这个答案是由XP和TDD的创造者Kent Beck给出的! 难怪有人评论说:

只是要地球人都不会觉得Kent Beck会这么说啊!我们有大堆程序员在忠实的追求着100%的代码测试覆盖率,因为这些程序员觉得Kent Beck也会这么干!我告诉过很多人,你在你的XP的书里说过,你并不总是支持“宗教信仰式的Test First”,但是今天Kent这么说,我还是很惊讶!

陈皓则是非常同意Kent的回答:“怎么合适怎么搞,爱怎么测试就怎么测试,只要自己和团队有信心就可以了。没有必要就一定要写测试,一定要测试先行。”

其他排名靠前的答案包括:

Dominic Rodger

为可能会出错的地方和边界情况编写单元测试。另外,单元测试应该跟着缺陷报告走,在修补缺陷之前编写好单元测试。开发人员就会对代码充满自信:一是bug已经修补,二是bug不会重现。

kitofr

关于TDD最大的误解之一就是第一个字母——测试(T)。这也是BDD出现的原因。因为大家没有真正理解第一个D(驱动)的重要性。我们总是倾向于对测试关注更多,而对设计的驱动关注太少。我想这是一个模糊的回答,但是你应该考虑如何驱动你的代码,而不是测试什么,这是覆盖率工具该做的事情。设计是一个很大而且问题更多的问题。

最后,陈皓表达了自己的观点:

读书人网 >行业软件

热点推荐