分析JUnit框架的代码实现2011-10-13 IBM 何正华 徐晔简介:本文细致地描述了 JUnit 的代码实现,在展示代码流程 UML 图的基础上,详细分析 JUnit 的 内部实现代码的功能与机制,并在涉及相关设计模式的地方结合代码予以说明。另外,分析过程还涉及 Reflection 等 Java 语言的高级特征。概述在测试驱动的开发理念深入人心的今天,JUnit 在测试开发领域的核心地位日渐稳定。不仅 Eclipse 将 JUnit 作为默认的 IDE 集成组件,而且基于 JUnit 的各种测试框架也在业内被广泛应用,并获得了 一致好评。目前介绍 JUnit 书籍文章虽然较多,但大多数是针对 JUnit 的具体应用实践,而对于 JUnit 本身的机制原理,只是停留在框架模块的较浅层次。本文内容完全描述 JUnit 的细致代码实现,在展示代码流程 UML 图的基础上,详细分析 JUnit 的内 部实现代码的功能与机制,并在涉及相关设计模式的地方结合代码予以说明。另外,分析过程还涉及 Reflection 等 Java 语言的高级特征。本文的读者应该对 JUnit 的基本原理及各种设计模式有所了解,主要是面向从事 Java 相关技术的设 计、开发与测试的人员。对于 C++,C# 程序员也有很好的借鉴作用。Junit 简介JUnit 的概念及用途JUnit 是由 Erich Gamma 和 Kent Beck 编写的一个开源的单元测试框架。它属于白盒测试,只要将 待测类继承 TestCase 类,就可以利用 JUnit 的一系列机制进行便捷的自动测试了。JUnit 的设计精简,易学易用,但是功能却非常强大,这归因于它内部完善的代码结构。 Erich Gamma 是著名的 GOF 之一,因此 JUnit 中深深渗透了扩展性优良的设计模式思想。 JUnit 提供的 API 既可以让您写出测试结果明确的可重用单元测试用例,也提供了单元测试用例成批运行的功能。在已经实 现的框架中,用户可以选择三种方式来显示测试结果,并且显示的方式本身也是可扩展的。JUnit 基本原理一个 JUnit 测试包含以下元素:表 1. 测试用例组成
| 开发代码部分 | 测试代码部分 | 测试工具部分 |
| 待测试类 A | 通过扩展 TestCase 或者构造 TestSuit 方法编写测试类 B | 一个测试运行器(TestRunner)R,可以选择图形界面或文本界面 |
操作步骤:将 B 通过命令行方式或图形界面选择方式传递给 R,R 自动运行测试,并显示结果。