background image

Java 如何使用 Junit Framework 进行单元测试的编

随着 Refactoring 技术和 XP 软件工程技术的广泛推广,单元测试的作用在软件工程中
变得越来越重要,而一个简明易学、适用广泛、高效稳定的单元测试框架则对成功的实施
单元测试有着至关重要的作用。在 java 编程语句环境里,Junit Framework 是一个已经
被多数 java 程序员采用和实证的优秀的测试框架,但是多数没有尝试 Junit Framework
的程序员在学习如何 Junit Framework 来编写适应自己开发项目的单元测试时,依然觉
得有一定的难度,这可能是因为 Junit 随框架代码和实用工具附带的用户指南和文档的着
重点在于解释单元测试框架的设计方法以及简单的类使用说明,而对在特定的测试框架
(Junit)下如何实施单元测试,如何在项目开发的过程中更新和维护已经存在的单元测试
代码没有详细的解释。因此本文档就两个着重点对 Junit 所附带的文档进行进一步的补充
和说明,使 Junit 能被更多的开发团队采用,让单元测试乃至 Refactoring、XP 技术更好
在更多的开发团队中推广。
  1. 单元测试的编写原则
  Junit 附带文档所列举的单元测试带有一定的迷惑性,因为几乎所有的示例单元都是
针对某个对象的某个方法,似乎 Junit 的单元测试仅适用于类组织结构的静态约束,从而
使初学者怀疑 Junit 下的单元测试所能带来的效果。因此我们需要重新定义如何确定有价
值的单元测试以及如何编写这些单元测试、维护这些单元测试,从而让更多的程序员接受
和熟悉 Junit 下的单元测试的编写。
  在 Junit 单元测试框架的设计时,作者一共设定了三个总体目标,第一个是简化测试
的编写,这种简化包括测试框架的学习和实际测试单元的编写;第二个是使测试单元保持
持久性;第三个则是可以利用既有的测试来编写相关的测试。从这三个目标可以看出,单
元测试框架的基本设计考虑依然是从我们现有的测试方式和方法出发,而只是使测试变
得更加容易实施和扩展并保持持久性。因此编写单元测试的原则可以从我们通常使用的测
试方法借鉴和利用。
  2. 如何确定单元测试
  在我们通常的测试中,一个单元测试一般针对于特定对象的一个特定特性,譬如,
假定我们编写了一个针对特定数据库访问的连接池的类包实现,我们会建立以下的单元
测试:
  在连接池启动后,是否根据定义的规则在池中建立了相应数量的数据库连接
  申请一个数据库连接,是否根据定义的规则从池中直接获得缓存连接的引用,还是
建立新的连接
  释放一个数据库连接后,连接是否根据定义的规则被池释放或者缓存以便以后使用
  后台 Housekeeping 线程是否按照定义的规则释放已经过期的连接申请
  如果连接有时间期限,后台 Housekeeping 线程是否定期释放已经过期的缓存连接