分析 JUnit 框架源代码 理解 JUnit 测试框架实现原理和设计模式 2009 年 5 月 31 日 本文细致地描述了 JUnit 的代码实现,在展示代码流程 UML 图的基础上,详细分析 JUnit 的内部实现代码的功能与机制,并在涉及相关设计模式的地方结合代码予以说明。另外,分析过程还涉及 Reflection 等 Jav a 语言的高级特征。 概述 在测试驱动的开发理念深入人心的今天,JUnit 在测试开发领域的核心地位日渐稳定。不仅 Eclipse 将 JUnit 作为默认的 IDE 集成组件,而且基于 JUnit 的各种测试框架也在业内被广泛应用,并获得了一致好评。目前介绍 JUnit 书籍文章虽然较多,但大多数是针对 JUnit 的具体应用实践,而对于 JUnit 本身的机制原理,只是停留在框架模块的较浅层次。 本文内容完全描述 JUnit 的细致代码实现,在展示代码流程 UML 图的基础上,详细分析 JUnit 的内部实现代码的功能与机制,并在涉及相关设计模式的地方结合代码予以说明。另外,分析过程还涉及 Reflection 等 Jav a 语言的高级特征。 本文的读者应该对 JUnit 的基本原理及各种设计模式有所了解,主要是面向从事 Jav a 相关技术的设计、开发与测试的人员。对于 C++,C# 程序员也有很好的借鉴作用。 Ju nit 简介 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 自动运行测试,并显示结果。 JUnit 中的设计模式体现 设计...