JUnit反模式 - 编程入门网
JUnit反模式时间:2011-02-04 Alex GarrettJUnit 的出现为开发人员带来了福音。遗憾的是,许多人仍然认为学会 JUnit API,编写几个测试,最后得到一个测试良好的应用程序就足够了。这种想法比不进行任何测试还要糟,因为这会导致对代码健康状态的误解。学习 JUnit 是测试中最容易的一部分。编写优秀的测试则是较困难的一个环节。本文将介绍一些常见的 JUnit 反模式,并说明如何解决它们。 两个月前,我和妻子决定在厨房里装上木镶板。这是我第一次装修房子,我带着一股盲目乐观主义精神,使用铁锤和钉子干起了装修。但这样做几乎是一场灾难,因为我用不好铁锤。最后,妻子不得不重新修整被我敲打得高低不平的镶板和出现的裂缝。 在装修卧室时,我认为已学到了一些经验教训,这次借来了岳父的气钉枪。仅用了装修厨房十分之一的时间,就装修完了卧室,但是气钉枪不能弥补我在其他方面的失误 —— 例如忘记了保持木板顶部的水平,切割木板时切错了位置,忘记检查木板,将有裂纹的木板钉了上去,等等。还出现了其他许多问题,这些问题幸好都被细心的妻子注意到了。通过此事,我认识到:气钉枪不如一个木匠。 JUnit:气钉枪式测试工具 我认为,JUnit 很像爸爸的气钉枪。JUnit 出现之前,测试不是不可能的,但是非常困难。事实上,它困难到了致使通常没有人愿意进行测试。即使进行测试,也仅仅是对那些看起来特别复杂或脆弱,以致人们有理由进行额外测试的那部分。 JUnit 就是专门解决此问题的工具。这里不可告人的秘密是,此现象致使许多编程人员实际上乐于 编写一些测试。这样就造成了编程人员编写测试,而客户期盼测试的情形。尽管仍有一些坚持者,但多数客户现在开始倾向于使用我们在测试领域的新霸主 JUnit。(有关热爱测试的更多信息,请参阅 参考资料)。 问题是,JUnit 不是万能药,它是一种名副其实的工具。像其他优秀的工具一样(JUnit 是最优秀的工具之一),JUnit 只做一件事情,并且能出色地完成,它提供一个用于执行测试的框架。具体表现在: JUnit 提供一个用于编写测试的模板,该模板可以安装、执行和卸载。 它允许您在层次结构中组织测试。 它允许您自动而又方便地执行测试。 它减少了来自执行过程中的测试报告量,允许使用同一测试套件中的不同测试操作程序。 尽管 JUnit 功能强大,使用起来很简单,但是,它也存在许多不足之处,需要其他工具来填补这些缺陷。以下是 JUnit 无法做到的: 对被测试的单元自动生成测试。 提供覆盖条件。 编写了劣质的测试时进行提示。 阐明的观点 Robert Binder 编写了一本好书,名称为 Testing Object-Oriented Systems: Models, Patterns, and Tools。Binder 是一位少有的天才人物 —— 一个测试圣人。作为一本测试方面的参考资料,该书的价值是无法衡量的。Binder 在本书的开头再次谈及 Scott Meyers 的测试问题。这个问题就是为 Triangle 对象编写单元测试。 Java™ 技术实现了一个采用三个边长的构造函数。每一边各有一个 getters 和 setters。该技术实现有三种方法:isIsosceles()、isScalene() 和 isEquilateral(),其中每一种方法都可以返回 true 或 false,具体情况取决于三角形的配置。triangle 还是 Polygon 类型的一个子类, 后者由 Figure 类派生而来。Figure 是代表对象的抽象类,该类可以通过光栅显示描绘。现在面临的挑战是如何编写此类的测试。 Binder 从 Meyers 的原始程序解决方案中列出了 33 个测试,并提供了 32 个与面向对象的问题属性有密切关系的测试。所以现在一共有 65 个测试。除非是影响生命安全的重要软件,否则您可能从来不会如此详细地测试代码,也不会了解到原来它是如此测试的。原因不是您有生理缺陷或者懒 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |