转自:http://www.javaresearch.org/article/showarticle.jsp?column=526&thread=9139
JUnit最佳实践
cherami 转贴 (参与分:712253,专家分:22624) 发表:2003-09-16 19:57 版本:1.0 阅读:6075次
Martin Fowler说过:“当你试图打印输出一些信息或调试一个表达式时,写一些测试代码来替代那些传统的方法。”一开始,你会发现你总是要创建一些新的Fixture,而且测试似乎使你的编程速度慢了下来。然而不久之后,你会发现你重复使用相同的Fixture,而且新的测试通常只涉及添加一个新的测试方法。
你可能会写许多测试代码,但你很快就会发现你设想出的测试只有一小部分是真正有用的。你所需要的测试是那些会失败的测试,即那些你认为不会失败的测试,或你认为应该失败却成功的测试。
我们前面提到过测试是一个不会中断的过程。一旦你有了一个测试,你就要一直确保其正常工作,以检验你所加入的新的工作代码。不要每隔几天或最后才运行测试,每天你都应该运行一下测试代码。这种投资很小,但可以确保你得到可以信赖的工作代码。你的返工率降低了,你会有更多的时间编写工作代码。
不要认为压力大,就不写测试代码。相反编写测试代码会使你的压力逐渐减轻,应为通过编写测试代码,你对类的行为有了确切的认识。你会更快地编写出有效率地工作代码。下面是一些具体的编写测试代码的技巧或较好的实践方法:
1. 不要用TestCase的构造函数初始化Fixture,而要用setUp()和tearDown()方法。
2. 不要依赖或假定测试运行的顺序,因为JUnit利用Vector保存测试方法。所以不同的平台会按不同的顺序从Vector中取出测试方法。
3. 避免编写有副作用的TestCase。例如:如果随后的测试依赖于某些特定的交易数据,就不要提交交易数据。简单的会滚就可以了。
4. 当继承一个测试类时,记得调用父类的setUp()和tearDown()方法。
5. 将测试代码和工作代码放在一起,一边同步编译和更新。(使用Ant中有支持junit的task.)
6. 测试类和测试方法应该有一致的命名方案。如在工作类名前加上test从而形成测试类名。
7. 确保测试与时间无关,不要依赖使用过期的数据进行测试。导致在随后的维护过程中很难重现测试。
8. 如果你编写的软件面向国际市场,编写测试时要考虑国际化的因素。不要仅用母语的Locale进行测试。
9. 尽可能地利用JUnit提供地assert/fail方法以及异常处理的方法,可以使代码更为简洁。
10.测试要尽可能地小,执行速度快。
版权声明 本篇文章对您是否有帮助? 投票: 是 否 投票结果: 8 2
作者其它文章:
使用Checklist提升项目的质量
提升项目组的开发效率
使用JkUnMount
Apache2.0运行模型分析及性能调整
优化Apache 2.0 性能
作者全部文章 查看作者的Blog
上一篇文章 返回〔软件测试〕
下一篇文章
文字广告链接
快速业务开发平台+在线自定义WEB报表平台+多级数据上报解决方案
上海网域网:上海、香港、美国服务器租用 服务器托管专家
数巨报表: 全程图形化设计无须代码,适合J2EE、ASP及.NET等环境,功能强大的Web报表工具
MatriX BI: 让企业迅速获得挖掘数据潜力,释放IT系统价值的能力
关于 JR | 版权声明 | 联系我们
©2002-2005 JR 版权所有 沪ICP备05019622号
>2. 不要依赖或假定测试运行的顺序,因为JUnit利用Vector保存测试方法。所以不同的平台会按不同的顺序从Vector中取出测试方法。
3. 避免编写有副作用的TestCase。例如:如果随后的测试依赖于某些特定的交易数据,就不要提交交易数据。简单的会滚就可以了。
上面两句话纠正了我的一个错误想法:认为可以依靠在测试中的顺序中产生的一些副作用来为下一测试方法提供测试数据。
有两个错误:
1)不要产生副作用;
2)不要依赖测试运行的顺序。