用JUnit框架实现Java单元测试

随着软件项目的逐渐增大,软件测试在软件开发中的地位显得越来越重要。如果软件项目没有良好的测试流程,随着系统的增大,无论项目管理人员还是软件开发人员都会对项目的前景失去信心,甚至会对项目的目标产生分歧,因为长期以来没有对程序代码和系统设计进行有效的控制,很多问题都被暂时掩盖或逐渐演化成其他的问题。软件开发周期越长,就会使得问题进化的版本越多,最后造成的结果是“剪不断,理还乱”。

单元测试是整个测试流程中最基础的部分,它们要求程序员尽可能早地发现问题,并给予控制,这是其一。另外,如果集成测试出现问题,它们可以帮助诊断。这样就为在软件开发流程中建立高效的事件反应机制打下了坚实基础。

JUnit就是为Java程序开发者实现单元测试提供一种框架,使得Java单元测试更规范有效,并且更有利于测试的集成。

JUnit的内部结构

JUnit的软件结构

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,就可以轻松的与已有的其他对象组合使用,从而使得单元测试的集成更加方便。

图1 测试结构图

时间: 2024-08-29 10:49:14

用JUnit框架实现Java单元测试的相关文章

Java单元测试(Junit+Mock+代码覆盖率)

单元测试是编写测试代码,用来检测特定的.明确的.细颗粒的功能.单元测试并不一定保证程序功能是正确的,更不保证整体业务是准备的. 单元测试不仅仅用来保证当前代码的正确性,更重要的是用来保证代码修复.改进或重构之后的正确性. 一般来说,单元测试任务包括 接口功能测试:用来保证接口功能的正确性. 局部数据结构测试(不常用):用来保证接口中的数据结构是正确的 比如变量有无初始值 变量是否溢出 边界条件测试 变量没有赋值(即为NULL) 变量是数值(或字符) 主要边界:最小值,最大值,无穷大(对于DOUB

《精通移动App测试实战:技术、工具和案例》一第2章 JUnit框架基础2.1 JUnit框架介绍

第2章 JUnit框架基础 精通移动App测试实战:技术.工具和案例 2.1 JUnit框架介绍 瀑布模型是最早出现的软件开发模型,如图2-1所示.该开发模型可以说在软件工程中占有重要的地位,它提供了软件开发的基本框架.其过程是从上一项活动接收该项活动的工作对象作为输入,利用这一输入实施该项活动应完成的内容,给出该项活动的工作成果,并作为输出传给下一项活动.同时评审该项活动的实施,若确认,则继续下一项活动:否则返回前面,甚至更前面的活动.对于经常变化的项目而言,瀑布模型毫无价值.然而,时至今日,

在Python的Flask框架中实现单元测试的教程

  在Python的Flask框架中实现单元测试的教程,属于自动化部署的方面,可以给debug工作带来诸多便利,需要的朋友可以参考下 概要 在前面的章节里我们专注于在我们的小应用程序上一步步的添加功能上.到现在为止我们有了一个带有数据库的应用程序,可以注册用户,记录用户登陆退出日志以及查看修改配置文件. 在本节中,我们不为应用程序添加任何新功能,相反,我们要寻找一种方法来增加我们已写代码的稳定性,我们还将创建一个测试框架来帮助我们防止将来程序中出现的失败和回滚. 让我们来找bug 在上一章的结尾

代码-java单元测试时jar读取项目中properties

问题描述 java单元测试时jar读取项目中properties 我的项目中引用同事的jar,这个jar中读取了我项目中的properties,我的properties里的value是从pom中获取的,这时问题出现了 jar只能读取properties中pom还没有注入时的value,也就是${value}形式.但我项目中自身的获取properties的代码可以成功获取pom注入后的value.这是什么问题?两个现象的区别就是一个是从jar中获取,一个是本地程序获取. 解决方案 肯定是jar中读

有没有公司愿意带新人呢(我懂SSH框架进行JAVA开发,深圳的)

问题描述 有没有公司愿意带新人呢(我懂SSH框架进行JAVA开发,深圳的)我是应届生,我懂JAVA,JSP,C#,ASP.NET.下面附上我采用(SSH)Spring2.5,Struts2,Hibernate3.3开发的博客作品.www.xueask.com因为是应届生,所以就没工作经验啦,如果哪位大侠愿意带我,请留下你的联系邮箱,谢谢啦.我的联系邮箱是mrxuehuolong@gmail.com谢谢! 问题补充:chenxiang105 写道 解决方案 我认为上面那位兄弟的话有点偏激了.如果我

ssh-SSH框架,java web实现了打印功能,但是我每次打印显示的都是上一次内容,刷新才正常

问题描述 SSH框架,java web实现了打印功能,但是我每次打印显示的都是上一次内容,刷新才正常 SSH框架,java web实现了打印功能,但是我每次打印显示的都是上一次内容,刷新才正常,请教各位大神这是什么原因,我是个新手~希望能够得到具体方法帮忙改正. 解决方案 直接每次打印后.设置刷新不就好 了 解决方案二: 没有代码,肯定没法给你具体解决办法.你可以先刷新在打印,这样试试.

在Python的Flask框架中实现单元测试的教程_python

 概要 在前面的章节里我们专注于在我们的小应用程序上一步步的添加功能上.到现在为止我们有了一个带有数据库的应用程序,可以注册用户,记录用户登陆退出日志以及查看修改配置文件. 在本节中,我们不为应用程序添加任何新功能,相反,我们要寻找一种方法来增加我们已写代码的稳定性,我们还将创建一个测试框架来帮助我们防止将来程序中出现的失败和回滚. 让我们来找bug 在上一章的结尾谈到,我故意在应用程序中引入一个bug.接下来让我描述一下它是什么样的bug,然后看看当我们的程序不按照我们意愿执行的时候,它在其中

使用JUnit来测试Java代码中的异常

使用JUnit来测试Java代码中的异常有很多种方式,你知道几种? 给定这样一个class. Person.java public class Person { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; }

JUnit一个回归测试框架用于Java开发人员编写单元测试

通过本文的介绍,您可以了解到什么是 Jhttp://www.aliyun.com/zixun/aggregation/29926.html">Unit,它有什么用处,JUnit 4.10 有什么新特性,并且如何应用. JUnit 是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework),主要供 Java 开发人员编写单元测试.在极限编程和重构中被极力推荐使用的一个工具,因为它可以大大地提高开发的效率.那么大家就