您好,欢迎访问三七文档
当前位置:首页 > 中学教育 > 初中教育 > 软件测试实验-JUnit单元测试
第三章JUnit单元测试实验1开始使用JUnit【实验目的】1、学习使用JUnit4.X进行单元测试;2、掌握JUnit4.X编写测试代码的方法;3、应用JUnit进行单元测试,掌握最佳实践编写测试代码。【实验环境】1、Windows环境,MyEclipse或Eclipse,JUnit4.x。2、每个学生操作1台电脑。【实验原理】JUnit是一个开源的Java编程语言的单元测试框架,最初由ErichGamma和KentBeck编写。Junit测试是一种白盒测试工具。JUnit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。具有JUnit经验对于应用“测试驱动开发(TDD)”的程序开发模型是非常重要的。JUnit本质上是一套框架,即开发者制定了一套条条框框,遵循这此条条框框要求编写测试代码,如继承某个类,实现某个接口,就可以用JUnit进行自动测试了。由于JUnit相对独立于所编写的代码,可以测试代码的编写可以先于实现代码的编写,XP中推崇的testfirstdesign的实现有了现成的手段:用JUnit写测试代码,写实现代码,运行测试,测试失败,修改实现代码,再运行测试,直到测试成功。以后对代码的修改和优化,运行测试成功,则修改成功。Java下的team开发,采用cvs(版本控制)+ant(项目管理)+JUnit(集成测试)的模式时,通过对ant的配置,可以很简单地实现测试自动化。【实验内容】根据下面的实验步骤完成实验。1、JUnit包下载。(1)从,打开该链接,会有一个下载链接,下载Junit4.X.zip,保存在用户机的文件系统中。(2)解包Junit-4.X,得到如图3-1的解包文件。图1Junit解包文件表1Junit文件说明文件/目录描述junit.jarJUnit框架结构、扩展和测试运行器的二进制发布src.jarJUnit的源代码,包括一个Ant的buildfile文件junit是个目录,内有JUnit自带的用JUnit编写的测试示例程序javadocJUnit完整的API文档doc一些文档和文章,包括“TestInfected:ProgrammersLoveWritingTests”和其它一些资料,可以帮助我们入门。(3)配置(以JUnit4.8.2为例)。步骤如下:①右击“我的电脑”-“属性”-高级-环境变量;②在系统变量中选择“CLASSPATH”(如果没有则新建一个,变量名CLASSPATH,变量值d:\junit4.8.2\junit-4.8.2.jar;d:\junit4.8.2);③如果有CLASSPATH,将d:\junit4.8.2\junit-4.8.2.jar;d:\junit4.8.2加入到变量值即可,多个中间需用;隔开。图2Junit配置成功(4)检验:运行中输入cmd输入命令:javaorg.junit.runner.JUnitCoreorg.junit.tests.AllTests配置成功,如图2所示。2、编写JUnit测试用例。使用JUnit的最佳实践:(1)新建一个名为test的sourcefolder,用于存放测试类源代码;(2)目标类与测试类应该位于同一个包下面,这样测试类中就不必导入源代码所在的包,因为他们位于同一个包下面;(3)测试类的命名规则:假如目标类是Calculator,那么测试类应该命名为TestCalculator或者是CalculatorTest。下面将以一个具体的实例进行说明。(1)新建一JavaProject。图3新建JavaProject(2)配置构建路径。图4配置构建路径(3)AddLibrary-JUnit4。图5AddLibrary图6选择JUnit4(1)图7选择JUnit4(2)(4)建一个包com.test并在此包下建一个除法类:Divide。图8类DivideDivide类的程序源代码如下所示:packagecom.test;publicclassDivide{privatestaticintresult;publicvoiddivide(intnum){result/=num;}publicintgetResult(){returnresult;}publicvoidsetResult(intresult){Divide.result=result;}}代码编写完成后,进行调试编译,确保没有语法错误。(5)右键Divide类。图9新建JUnitTestCase(1)图10新建JUnitTestCase(2)图11新建JUnitTestCase(3)MyEclipse会自动为测试类取名:被测试类+Test,单击Next就可以了。根据图12选择需要进行测试的方法。注意:测试类之所以使用“Test”开头或“Test”结尾,是为了更好的区分测试类与被测试类。图12选择需要测试的方法(6)创建测试用例。首先创建一个默认的测试用例。图13产生默认的测试用例(7)执行测试用例。如图14所示。测试结果:红色,测试失败。图14运行测试用例图15测试结果所有类测试结果(8)修改测试用例:DivideTest.java。具体代码如图16所示。新测试用例运行后的测试结果如图17所示。注意:测试方法必须使用注解org.junit.Test修饰。测试方法必须使用publicvoid修饰,而且不能带有任何参数。测试方法在JUnit4.X中没有要求,但是为了使得命名意义,一般推荐采用“test”+“被测试方法”的命名规则。assertEquals是由JUnit提供的一系列判断测试结果是否正确的静态断言方法(位于类org.junit.Assert中)之一,我们使用它将执行结果result和预期值“result”进行比较,来判断测试是否成功。图16修改后的测试用例图17修改后的测试用例的测试结果绿色的进度条提示我们,测试运行通过了。但现在就宣布代码通过了单元测试还为时过早。记住:你的单元测试代码不是用来证明你是对的,而是为了证明你没有错。因此单元测试的范围要全面,比如对边界值、正常值、错误值得测试;对代码可能出现的问题要全面预测,而这也正是需求分析、详细设计环节中要考虑的。3、应用JUnit对类WordDealUtil编写测试代码。(1)被测试程序说明:对名称、地址等字符串格式的内容进行格式检查。将Java对象名称(每个单词的头字母大写)按照数据库命名的习惯进行格式化格式化后的数据为小写字母,并且使用下划线分割命名单词。importjava.util.regex.Matcher;importjava.util.regex.Pattern;/***对名称、地址等字符串格式的内容进行格式检查*或者格式化的工具类*/publicclassWordDealUtil{/***将Java对象名称(每个单词的头字母大写)按照*数据库命名的习惯进行格式化*格式化后的数据为小写字母,并且使用下划线分割命名单词*例如:employeeInfo经过格式化之后变为employee_info*@paramnameJava对象名称*/publicstaticStringwordFormat4DB(Stringname){Patternp=Pattern.compile([A-Z]);Matcherm=p.matcher(name);StringBuffersb=newStringBuffer();while(m.find()){m.appendReplacement(sb,_+m.group());}returnm.appendTail(sb).toString().toLowerCase();}}(2)添加测试代码。importstaticorg.junit.Assert.assertEquals;importorg.junit.Test;publicclassTestWordDealUtil{//测试wordFormat4DB正常运行的情况@TestpublicvoidwordFormat4DBNormal(){Stringtarget=employeeInfo;Stringresult=WordDealUtil.wordFormat4DB(target);assertEquals(employee_info,result);}}推荐每编写完一个测试方法,则执行”run”,看测试结果,结果应该是通过的。测试结果通过:(3)继续添加测试代码,并运行看测试结果。publicclassTestWordDealUtil{//测试null时的处理情况@TestpublicvoidwordFormat4DBNull(){Stringtarget=null;Stringresult=WordDealUtil.wordFormat4DB(target);assertNull(result);}//测试空字符串的处理情况@TestpublicvoidwordFormat4DBEmpty(){Stringtarget=;Stringresult=WordDealUtil.wordFormat4DB(target);assertEquals(,result);}//测试当首字母大写时的情况@TestpublicvoidwordFormat4DBegin(){Stringtarget=EmployeeInfo;Stringresult=WordDealUtil.wordFormat4DB(target);assertEquals(employee_info,result);}//测试当尾字母为大写时的情况@TestpublicvoidwordFormat4DBEnd(){Stringtarget=employeeInfoA;Stringresult=WordDealUtil.wordFormat4DB(target);assertEquals(employee_info_a,result);}//测试多个相连字母大写时的情况@TestpublicvoidwordFormat4DBTogether(){Stringtarget=employeeAInfo;Stringresult=WordDealUtil.wordFormat4DB(target);assertEquals(employee_a_info,result);}}再次运行测试。很遗憾,JUnit运行界面提示我们有两个测试情况未通过测试——当首字母大写时得到的处理结果与预期的有偏差,造成测试失败(failure);而当测试对null的处理结果时,则直接抛出了异常——测试错误(error)。显然,被测试代码中并没有对首字母大写和null这两种特殊情况进行处理。图18JUnit测试运行结果(4)修改测试代码,直到测试通过。修改以后的代码:测试结果:【实验小结】通过本次实验掌握了Junit单元测试的环境配置,以及基本操作步骤,学习到了JInit单元测试的作用以及如何修改错误,对以后进行软件测试方面收获非常大。经过这次理论学习,明白了要求掌握的知识对于我今后的作用。这让我明确了以后学习的目标,在不断学习软件编程的同时,也应该继续软件测试的深入学习。
本文标题:软件测试实验-JUnit单元测试
链接地址:https://www.777doc.com/doc-4276374 .html