单元测试是整个测试流程中最基础的部分,它们要求程序员尽可能早地发现问题,并给予控制,这是其一。另外,如果集成测试出现问题,它们可以帮助诊断。这样就为在软件开发流程中建立高效的事件反应机制打下了坚实基础。
JUnit就是为Java程序开发者实现单元测试提供一种框架,使得Java单元测试更规范有效,并且更有利于测试的集成。
JUnit 共有七个包,核心的包就是junit.framework 和junit.runner。Framework包负责整个测试对象的构架,Runner负责测试驱动。
JUnit的类结构
JUnit有四个重要的类:TestSuite、TestCase、TestResult、TestRunner。前三个类属于Framework包,后一个类在不同的环境下是不同的。这里使用的是文本测试环境,所以用的是 junit.textui.TestRunner。各个类的职责如下:
1.TestResult,负责收集TestCase所执行的结果,它将结果分为两类,客户可预测的Failure和没有预测的Error。同时负责将测试结果转发到TestListener(该接口由TestRunner继承)处理;
2.TestRunner,客户对象调用的起点,负责对整个测试流程的跟踪。能够显示返回的测试结果,并且报告测试的进度。
3.TestSuite, 负责包装和运行所有的TestCase。
4.TestCase, 客户测试类所要继承的类,负责测试时对客户类进行初始化,以及测试方法调用。
另外还有两个重要的接口:Test和TestListener。
1.Test, 包含两个方法:run() 和countTestCases(),它是对测试动作特征的提取。
2.TestListener, 包含四个方法:addError()、addFailure()、startTest()和endTest(),它是对测试结果的处理以及测试驱动过程的动作特征的提取。
下面给出的两个类图(篇幅有限,只显示主要部分)很好地阐明了类之间的关系,以及junit的设计目标(如图1)。测试案例的类采用Composite模式。这样,客户的测试对象就转变成一个“部分—整体”的层次结构。客户代码仅需要继承类TestCase,就可以轻松的与已有的其他对象组合使用,从而使得单元测试的集成更加方便。
图2是测试跟踪类图。图2左边TestSuite包含了测试对象集合,右边包含了测试结果集。具体如何处理结果,以及包含哪些测试对象,并没有立即得出结论,而是尽量地延迟到具体实现的时候。例如,实现接口TestListener的JUnit中就含有:junit.awtui.TestRunner、junit.swingui. TestRunner、junit.ui.TestRunner等,甚至客户用自己的类实现TestListener,从而达到多样化的目的。
从以上两个类图,可以了解JUnit对单元测试的基本思路,这个框架的核心就是结果集和案例集。
实施JUnit的几点建议
从以上的分析中,可以了解JUnit的结构和流程,但是在实际应用JUnit时,有几点建议还需要说明,如下:
1. 客户类可以重载runTest(),它的缺省实现是调用方法名为fName的测试方法。如果客户不是使用TestSuite加载TestCase,就尤其需要对其重载,当然这种方式并不赞成使用,不利于集成。另外,setUp()和tearDown()的功能似乎与构造函数雷同,但如果测试案例之间具有类继承关系,采用构造函数初始化一些参数就会造成数据的混乱,不利于判定测试结果的有效性。
2. 待测试函数的调用顺序是不确定的,采用的数据结构是Vector()。如果需要有顺序关系,可以将它们组合到一起,然后用同一个测试方法。
3. 为了使测试结果清晰明了,程序中最好不要有打印输出,要么程序的打印输出与JUnit测试的打印输出不要用同一个数据源System.out。其实这是两种测试习惯,直接打印输出是较传统的,从测试动机上考虑它也是较随意的,并且结果需要人工观察。如果直接打印输出较多的话,观察者可能无法获得满意的结果。
此外,如何扩展这个测试框架呢? junit.extensions包给出了几点提示。我们可以使用junit.extensions. ActiveTest在不同的线程中运行一个测试实例。 对于要对测试案例添加新的功能可以采用Decorator模式,可以参考junit.extensions.TestDecorator以及它的子类junit.extensions.TestSetup、junit.extensions.RepeatedTest。这些仅仅提供了一些拓宽的思路,涉及到具体测试目标,还需进一步地挖掘。
分享到:
相关推荐
这个“Junit学习.rar”压缩包显然包含了关于JUnit从3.8到4.9版本的学习资料,包括可能的操作手册、教程文档以及个人的学习笔记。以下是基于这些资源可能涵盖的一些关键知识点: 1. **JUnit基础知识**:了解JUnit的...
### JUnit学习资料知识点解析 #### 一、JUnit概述 **JUnit** 是一款开源的Java测试框架,专门用于编写和运行可重复利用的自动化测试。它最初由Ernst & Young公司的Kent Beck和Erich Gamma开发,自1998年以来一直是...
这篇博客“JUnit学习笔记”可能是博主GreatJone在深入学习JUnit过程中所做的记录和总结,包括了JUnit的基本概念、核心组件、使用方法以及一些高级特性。 首先,JUnit的核心理念是基于断言的测试,即编写特定的测试...
Junit学习笔记,希望有用~~~~~~~~~~~~~~~~~~~~~~
### 单元测试JUnit学习专题知识点详述 #### 一、单元测试概述 **单元测试定义**:单元测试是软件开发中的一个测试方法,通常针对软件中的最小可测试单元进行验证,例如一个类或者一个函数。其目的是确保每个单元...
这篇“JUnit学习--带附件”的文章很可能深入介绍了如何在JUnit4中进行单元测试,以及如何处理测试过程中的数据附件。在本文中,我们将详细探讨JUnit4的关键概念、使用方法以及如何与附件结合。 首先,JUnit4引入...
标题“log4j, Junit 学习”暗示了我们要探讨的两个关键主题:Log4j 和 JUnit。Log4j 是一个广泛使用的Java日志框架,它提供了灵活的日志记录功能,有助于调试和监控应用程序。JUnit 是一个用于单元测试的Java库,是...
**JUnit 概述** JUnit 是一个广泛使用的 Java 编程语言的单元测试框架,由 Erich Gamma 和 Kent Beck 创建。它的主要目标是提供一个简单、高效的方式来验证代码的正确性,尤其是在开发过程中确保代码功能的独立性和...
Ant and JUnit 学习
通过这份Junit学习笔记,你可以掌握单元测试的基本思想,熟练运用JUnit进行代码质量的保障。在实际开发中,单元测试不仅能帮助找出错误,还能在重构时提供安全保障,提高代码质量。不断学习和实践,你会发现自己在...
这个"JUnit学习资料大全第一部分(共2部分)"很可能是为了帮助开发者深入理解和熟练掌握JUnit的使用,以便在开发过程中确保代码的质量和可靠性。 在Java和J2EE的开发环境中,单元测试是不可或缺的一部分。它允许...
JUnit是Java语言中广泛使用的单元测试框架,它使得开发者能够编写和执行针对代码各个部分的独立测试。单元测试是软件开发中的重要环节,确保代码片段按照预期运行,并且在修改或添加新功能时不会破坏现有功能。JUnit...
本资源包是JUnit学习资料大全的第二部分,旨在帮助Java和J2EE开发者深入理解并熟练掌握单元测试的实践与技巧。 在Java J2EE项目开发中,单元测试是确保代码质量、降低维护成本的关键环节。JUnit通过提供一个简洁的...
在本篇《junit学习(十)——Spring与Hibernate整合的单元测试》中,我们将探讨如何在Java开发中,利用JUnit进行Spring和Hibernate框架的集成测试。单元测试是软件开发中的重要环节,它能帮助开发者确保代码的质量和...
在这个“junit 学习资料”中,我们可能会涵盖以下关键知识点: 1. **JUnit 概述**:JUnit 是一个开源项目,由 Erich Gamma 和 Kent Beck 开发,它是基于 xUnit 测试框架家族的一员。JUnit 提供了一个简单的 API,...
JUnit 是一个广泛使用的Java编程语言的单元测试框架,由Erich Gamma和Kent Beck共同开发,他们也是设计模式和极限编程领域的知名专家。JUnit 4.1是本文档中提到的版本,它基于Java 5.0的新特性,如注解(annotations...
### JUnit学习资料知识点详解 #### 一、JUnit简介及基本使用步骤 JUnit是一个流行的Java单元测试框架,广泛应用于Java应用程序的开发过程中。通过JUnit,开发者可以方便地编写和执行测试用例,确保代码的质量和稳定...
JUnit是Java语言中广泛使用的单元测试框架,它对于确保软件质量起到了至关重要的作用。通过JUnit,开发者能够对代码中的单一方法或多个方法进行独立验证,确保它们按照预期工作。JUnit的强大之处在于它允许创建...
通过学习这个JUnit教程,你可以掌握如何有效地编写和组织测试用例,以提高代码质量,减少错误,并确保软件功能的稳定性。同时,理解JUnit的基本结构和断言机制对于进行有效的单元测试至关重要。
总之,这个学习资源将带你深入理解JUnit的基本概念和高级特性,通过阅读`JUnit学习笔记.txt`并动手实践其中的示例,你将能熟练掌握如何利用JUnit3和JUnit4进行有效的单元测试,从而提升代码质量和项目稳定性。