软件测试(第2章)_第1页
软件测试(第2章)_第2页
软件测试(第2章)_第3页
软件测试(第2章)_第4页
软件测试(第2章)_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

第二章JUnit实际应用课程目标JUnit中常用的接口JUnit中常用的类使用JUnit的一些经验

体验项目——<使用JUnit对程序进行测试>

想知道怎么使用JUnit对java程序进行测试吗?在经过书写测试用例和相关的代码之后,程序测试结果如图所示:图2-1中黑框圈起来的部分显示为绿色,表示测试已经成功通过。JUnit中常用的接口JUnit中最常用的接口是Test接口和TestListener接口。

Test接口的主要作用是运行测试和收集测试结果,Test接口使用了Composite设计模式,是单独测试用例(TestCase)、聚合测试模式(TestSuite)及测试扩展(TestDecorator)的共同接口。

Test接口提供了两个方法,分别是publicintcountTestCases()和publicvoid

run(TestResult),打开上一章中我们已经配置好的Eclipse环境,在“包资源管理器”窗口中展开“ProjectWithJUnit”工程,可以看到这两个方法,如图所示:

其中,countTestCases()方法用来统计该次测试有多少个TestCase,另外一个方法是run(TestResult),TestResult是实例接受测试结果,run方法执行本次测试。

TestListener接口是个事件监听接口,可供TestRunner类使用。它通知listener的对象相关事件,方法包括测试开始startTest(Testtest),测试结束endTest(Testtest),增加错误addError(Testtest,Throwablet)和增加失败addFailure(Testtest,AssertionFailedErrora),如上图所示。JUnit中常用的类JUnit中常用的类有:TestCase类Assert类TestSuite类TestResult类TestFailure类TestCase类 TestCase类是一个抽象类,是Test接口的抽象实现,它定义了测试中的固定方法,它不能被实例化,只能被继承,其构造函数TestCase(Stringname)根据输入的测试名称name创建一个测试实例。由于每一个TestCase在创建时都要有一个名称,所以若某个测试失败了,便可识别出是哪个测试失败。Assert类 Assert类是一个静态类,它是一系列断言方法的集合,它包含了一组静态的测试方法,用于对期望值和实际值进行比较,从而确定是否正确,如果测试失败,Assert类就会抛出一个AssertionFailedError异常,JUnit测试框架将这种错误归入Failes并加以记录,同时标志为未通过测试。如果该类方法中指定一个String类型的参数,则该参数将被作为AssertionFailedError异常的标识信息,告诉测试人员该异常的详细信息。

JUnit提供了6大类31组断言方法,包括基础断言、数字断言、字符断言、布尔断言、对象断言,包含方法如图所示:TestSuite类 TestSuite类是一个测试包类,即多个测试的组合,该类负责组装多个TestCase。待测的类中可能包括了对被测类的多个测试,而TestSuite负责收集这些测试,使我们可以在一个测试中,完成全部的对被测类的测试。

TestSuite类实现了Test接口,且可以包含其它的TestSuite。它可以处理加入Test时的所有抛出异常。TestSuite类 TestSuite处理测试用例有6个规约(否则会被拒绝执行测试),如下所示:测试用例必须是公有类(public)。测试用例必须继承于TestCase类。测试用例的测试方法必须是公有的(public)。测试用例的测试方法必须被声明为void。测试用例中测试方法的前置名词必须是test。测试用例中测试方法无任何传递参数。该类包含的方法如图所示:TestResult类 TestResult类是一个结果类,它集合了任意测试的累加结果,通过TestResult实例传递给每个测试的run()方法。TestResult在执行TestCase时,如果失败,则会抛出异常。 这个类包含的方法如图所示:TestFailure类 TestFailure类是一个“失败”状况的收集类,解释每次测试执行过程中出现的异常情况。它所包含的方法如图所示:ComparisonFailure类 ComparisonFailure类提供两个字符串的比对,不匹配则给出详细的差异字符。 有关JUnit中类和方法的详细使用,请参看JUnit的帮助文档(即API文档)。下面我们做一个测试的例子(1)用Eclipse建立一个项目FirstTest,然后再建立一个包,包名为src,在src包下创建一个名为Triangle.java的Java程序,代码如下:

packagesrc; publicclassTriangle { protectedlonglborderA=0; protectedlonglborderB=0; protectedlonglborderC=0; }

类中有如下方法:publicTriangle(intlborderA,intlborderB,intlborderC){ this.lborderA=lborderA; this.lborderB=lborderB; this.lborderC=lborderC;}publicbooleanisTriangle(Triangletriangle){ booleanisTrue=false; if((triangle.lborderA>0&&triangle.lborderA<200) &&(triangle.lborderB>0&&triangle.lborderB<200) &&(triangle.lborderC>0&&triangle.lborderC<200)) { if((triangle.lborderA<(triangle.lborderB+triangle.lborderC)) &&(triangle.lborderB<(triangle.lborderA+triangle.lborderC)) &&(triangle.lborderC<(triangle.lborderA+triangle.lborderB))) isTrue=true; } returnisTrue;}publicStringisType(Triangletriangle){ StringstrType=""; if(this.isTriangle(triangle)) { if(triangle.lborderA==triangle.lborderB&&triangle.lborderB==triangle.lborderC) strType="等边三角形"; elseif((triangle.lborderA!=triangle.lborderB)&& (triangle.lborderB!=triangle.lborderC)&& (triangle.lborderA!=triangle.lborderC)) strType="不等边三角形"; else strType="等腰三角形"; } returnstrType;}(2)在src包下再写一个名为ExampleTest.java的测试用例,用于测试Triangle.java,代码如下:packagesrc;importjunit.framework.TestCase;importjunit.framework.Test;importjunit.framework.TestSuite;publicclassExampleTestextendsTestCase{ publicTriangletriangle;}类中的方法如下:protectedvoidsetUp()throwsException{ //super.setUp(); triangle=newTriangle(10,2,9);}publicstaticTestsuite(){ returnnewTestSuite(ExampleTest.class);}publicvoidtestIsTriangle(){ assertTrue(triangle.isTriangle(triangle));}publicvoidtestIsType(){ assertEquals("这次测试",triangle.isType(triangle),"不等边三角形");}publicstaticvoidmain(String[]args){ junit.textui.TestRunner.run(suite()); //junit.textui.TestRunner.run(ExampleTest.class);}

该测试用例继承自TestCase,并用setUp()方法对Triangle类实例化了一个对象triangle,由于这里是对isType()和isTriangle()两个方法进行测试,所以用了TestSuite,并将需要测试的类ExampleTest.class传给它,最后将其封装在一个suite()方法中,testIsTriangle()方法用于测试isTriangle(),testIsType()方法用于测试isType(),其中assertTrue()方法用于确定返回值是不是True,assertEquals()方法用于确定它的参数是不是相等,在Eclipse中运行上面的代码,程序运行结束后,在Eclipse中出现运行器窗口,如图所示:上图中方框圈起来的部分显示为绿色,表示测试已经通过。如果我们将ExampleTest.java中的代码:“assertEquals("这次测试",triangle.isType(triangle),"不等边三角形");”改为如下代码:“assertEquals("这次测试",triangle.isType(triangle),"等边三角形");”

上图中方框圈起来的部分显示为红褐色,表示测试没有通过,其中故障跟踪栏中已经显示出是“比较失败”的错误,此时如果双击故障跟踪栏中的第一行代码,即弹出“比较结果”消息框,如下图所示:

可以看到testIsType()方法中期望的是“不等边三角形”,而实际结果是“等边三角形”,此时双击故障跟踪栏中的第二行代码,则ExampleTest.java代码中测试出错的代码段会高亮显示。 下面我们再进行一个测试,我们先将testIsType()方法中的“等边三角形”,改为“不等边三角形”,这样这个方法就不会出错了,然后我们将testIsTriangle()方法中的代码: “assertTrue(triangle.isTriangle(triangle));”

改为: “assertFalse(triangle.isTriangle(triangle));”

上图中方框圈起来的部分显示为红褐色,表示测试没有通过,看一下故障跟踪中的第一行,就会发现这是一个“确认失败”的错误,双击故障跟踪中的第二行,就可以直接到出错的地方。如下图所示,其中高亮显示的部分就是出错的代码。测试结果表明确认结果不是False,因为在我们初始化三角形的三条边时,的确是三角形,所以应该返回True,所以这里应该用assertTrue()方法,修改后再运行上面的代码,就会发现测试通过了。使用JUnit的一些经验尽量少用TestCase的构造函数初始化对象,要用setUp()和tearDown()方法。不要依赖或假定测试运行的顺序,因为JUnit利用Vector保存测试方法,所以不同的平台会按不同的顺序从Vector中取出测试方法。避免编写有副作用的TestCase。例如:如果随后的测试依赖于某些特定的交易数据,就不要提交交易数据,而使用简单的回滚就可以了。当继承一个测试类时,要记得调用父类的setUp()和tearDown()方法。将测试代码和工作代码放在一起,一起进行同步编译和更新。使用JUnit的一些经验测试类和测试方法应该有一致的命名方案。例如在工作类名前加上Test,

温馨提示

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

评论

0/150

提交评论