《软件测试基础》课件-第15章_第1页
《软件测试基础》课件-第15章_第2页
《软件测试基础》课件-第15章_第3页
《软件测试基础》课件-第15章_第4页
《软件测试基础》课件-第15章_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第15章单元测试工具

15.1Junit的安装15.2Junit的特点15.3Junit的内容15.4Junit的设计原则15.5测试示例

15.1Junit的安装

首先给出Junit3.8.1版本的安装步骤,如下所示:

(1)下载Junit。登录Junit的网站(/),从该网站可以下载Junit,并可找到相关资料。

(2)解包Junit,如表15.1所示。

(3)检验安装Junit。检验Junit是否安装正确,执行Junit自带的测试示例程序,详细步骤如下所示:

①打开命令行提示窗口。

②将Junit的目录(Windows系统下C:\junit3.8.1或linux系统下opt\junit3.8.1)作为当前目录。

③执行下列命令:

>java–classpathjunit.jar;.junit.textui.TestRunner

junit.samples.AllTests执行测试命令,类路径包含了junit.jar和当前的目录(.)。junit.jar是仅有的需要放到类路径下的文件。当前的目录(.)是解包Junit的目录,Junit测试的所有*.class文件从此开始。junit.textui.TestRunner是Junit的基于文本的测试运行器的类名,会执行所有的Junit测试,并将结果报告给控制台。junit.samples.AllTests是运行测试套件的名字。

(4)运行Junit测试。

15.2Junit的特点

Junit用于单元级测试的开放式框架,具有如下优势:

(1) Junit是完全免费的。Junit是公开源代码的,可以进行二次开发。

(2)使用方便。Junit可以快速地撰写测试并检测程序代码,随着程序代码增加测试用例,Junit执行测试类似编译程序代码一样容易。

(3) Junit检验结果并提供立即回馈。Junit自动执行并且检查结果,执行测试后获得简单回馈,不需要人工检查测试结果报告。

(4) Junit合成测试系列的层级架构。Junit把测试组织成测试系列,允许组合多个测试并自动回归整个测试系列。Junit与Ant结合实施增量开发和自动化测试。

(5) Junit提升软件的稳定性。Junit使用小版本发布,控制代码更改量。同时,引入了重构概念,提高软件代码质量。

(6)与IDE的集成。与Java相关的IDE环境集成,实现测试及开发代码之间无缝连接。

15.3Junit的内容

Junit作为单元测试框架,共有六个包,其中最核心的三个包是Junit.framework、Junit.runner和Junit.textui。Junit.framework是测试构架,包含了Junit测试类所需的所有基类;Junit.runner负责测试驱动的全过程;Junit.textui负责文字方式的用户交互。

(1)

Junit.framework共有6个主要类或接口,分别是Test、Assert、TestCase、TestSuite、TestListener和TestResult,

TestSuite处理TestCase有6个规约,否则便会拒绝执行测试。这6个规约如下所示:

●该测试用例必须是公有类。

●该测试用例必须继承于TestCase类。

●测试用例中测试方法必须是公有的(Public)。

●测试用例中测试方法必须被声明为Void。

●测试用例中的测试方法的前置名词必须是test。

●测例中测试方法无任何传参。TestSuite处理的测试用例标准写法:

//必须声明为Public类,继承于Junit.framework.TestCase类

PublicclassClass_TestCaseextendsTestCase{

//标准测试用例构造方法无需变动

PublicClass_TestCase(){

//必须声明为public

Super();

//默认写法一般不用重写

}

PublicvoidtestAMethod(){…}//测试方法必须声明为Public,并且加上“test”

//修饰前缀

PublicvoidtestBMethod(){…}

}

(2) Junit.runner包中定义Junit测试框架的交互形式,也是整个Junit的交互框架。BaseTestRunner抽象类是Junit.runner包的核心类,用于实现TestListener接口,定义运行测试的公共方法。所有Junit框架和外界进行交互的行为都被此包所定义。BaseTestRunner抽象类分别被Junit中awtui、swingui和textui三个包中同名的TestRunner方法共同继承,形成3种不同风格的Junit交互模式。

一般来说,命令行交互模式执行测试速度最快,界面简单,返回的错误值集成到Ant中进行后续处理。图形交互模式执行测试,采用3种色块:灰色、绿色、红色标注测试分组,给出相关测试失败的错误原因。其中,灰色代表羞涩,表示单元代码的错误输出;绿色等同于活跃的生命,表示结果正确;红色表示当前代码出现了严重的错误。

(3) Junit.textui包中主要的类是TestRunner,继承了BaseTestRunner,是客户对象调用的起点,负责对整个测试流程跟踪,显示返回测试结果,报告测试进度。

15.4Junit的设计原则

Junit不仅是验证程序的正确性或者是一种发现Bug的工具,而且是为了验证被测试代码是否实现了符合预期设计而存在。Junit重构功能如下所示。

步骤一:编写单元级测试代码,进行测试用例的设计。

步骤二:编写代码通过单元级测试。

步骤三:重构的运用。

步骤四:重新运行测试。

下面给出Junit测试的设计原则。

1)不要测试简单的情况

Junit只是一个优秀的单元级测试架构,并没有规定要测试些什么。一般来说,被测试类的每一个公共方法对应一个测试方法,但是对于一些不可能出错的方法,例如Set和Get方法,这样的做法就没有任何意义了。

2)测试任何可能出现错误的地方

极限编程(XP)的测试原则之一是不放过任何可能出错的地方。如果类复杂,则完全测试的难度较大;反之,如果类简单,则完全测试的可能性就大。Junit支持重构,强调类在功能上尽可能简单易理解。

3)测试边界条件

边界条件必须考虑可能的溢出,例如集合是否为空、系统内存地址的溢出、数组的第一个和最后一个元素。

通常需要考虑的边界条件有:

(1)未初始化:很多编译器能够在某种情况下给出对象没有初始化的信息提示,但是更多的隐藏未初始化情况被忽略。

(2) Null值:如果输入Null值,代码该如何处理,是否会抛出指定的异常情况。

(3)最大值、最小值:第一个和最后一个是必然的选择。

(4)临界值:如果超过最大值或者小于最小值,是否会抛出指定的异常情况。

(5)初始值:不同条件语句的初始值不同,是0还是1或者循环次数是i++还是--i等。

4)自动化

Junit单元级测试必须被自动化,对于重构代码的更新意味着能快速反馈。另外,自动化测试也意味着对测试结果自动评价其是否符合预期值的设定。

5)测试依赖于接口

利用类接口进行测试是一种策略,即测试要依赖于对象接口的实现。从设计上来看,频繁地测试一个类的非接口方法是不正常的,这意味着过多地依赖于类的实现而非类的接口。

15.5测试示例

通过以下几个步骤,Junit完成简单的测试:

(1)创建TestCase类的一个子类。

(2)编写若干测试用例,每个测试用例书写格式如下所示:

Publicvoidtest<TestCaseName>(){…}

(3)编写一个测试套件方法加入第(2)步编写的测试用例。

PublicstaticTestsuite(){…}

编译上述子类以及被测构件,用Junit提供的运行器TestRunner运行测试。

【例15-1】Junit测试的简单范例。

步骤如下:

步骤1:创建一个TestCase的子类。

packagejunitfaq;

importjava.util.*;

importjunit.framework.*;

publicclassSimpleTestextendsTestCase{

publicSimpleTest(Stringname){

super(name);

}步骤2:写一个测试方法断言期望的结果。

publicvoidtestEmptyCollection(){

Collectioncollection=newArrayList();

assertTrue(collection.isEmpty());

}

步骤3:写一个suite()方法,使用反射动态地创建包含

testXxxx方法的测试套件。

publicstaticTestsuite(){

returnnewTestSuite(SimpleTest.class);

}步骤4:运行测试。

方法一:文本方式。

在main()方法里调用junit.textui.TestRunner.run(…),具体代码如下所示:

publicstaticvoidmain(Stringargs[]){

junit.textui.TestRunner.run(suite());

}

}

运行结果如图15.1所示。图15.1【例15-1】文本方式运行结果分析测试如下所示:Time上的小点表示测试个数,如果测试通过则显示OK;否则在小点的后边标上F,表示该测试失败。

Junit报告结果为OK,表明测试成功;反之,根据Junit提示的错误信息进行修正。

方法二:图形方式。

采用如下语句,其执行结果如图15.2所示。

javajunit.swingui.TestRunnerjunitfaq.SimpleTest图15.2【例15-1】图形方式运行结果实际测试某个类功能常常需要执行一些共同的操作,完成以后需要销毁所占用的资源(例如网络连接、数据库连接,关闭打开的文件等)。TestCase类提供的setUp方法在每个testXxxx方法之前运行,而tearDown方法在每个testXxxx方法结束以后执行,既共享了初始化代码,又消除了测试代码之间的相互影响。

【例15-2】

判断三角形。

(1) Triangle类作为三角形类,用于求解三角形的周长、面积等,代码如下所示。

importjava.lang.Math;

publicclassTriangle

{

inta,b,c;

doublearea,len;

publicvoidset(inti,intj,intk)

{

a=i;

b=j;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论