Eclipse软件开发工具:第11章 单元测试JUnit

上传人:cl****1 文档编号:570834824 上传时间:2024-08-06 格式:PPT 页数:34 大小:1.41MB
返回 下载 相关 举报
Eclipse软件开发工具:第11章 单元测试JUnit_第1页
第1页 / 共34页
Eclipse软件开发工具:第11章 单元测试JUnit_第2页
第2页 / 共34页
Eclipse软件开发工具:第11章 单元测试JUnit_第3页
第3页 / 共34页
Eclipse软件开发工具:第11章 单元测试JUnit_第4页
第4页 / 共34页
Eclipse软件开发工具:第11章 单元测试JUnit_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《Eclipse软件开发工具:第11章 单元测试JUnit》由会员分享,可在线阅读,更多相关《Eclipse软件开发工具:第11章 单元测试JUnit(34页珍藏版)》请在金锄头文库上搜索。

1、第第11章章 单元测试单元测试JUnit2本章学习目标n n本章要达到的主要目本章要达到的主要目标标:n n理解理解单单元元测试测试的概念;的概念;n n了解了解JUnitJUnit单单元元测试测试基基础础;n n熟悉熟悉JUnitJUnit中常用的中常用的类类;n n掌握掌握EclipseEclipse中中JUnitJUnit的配置;的配置;n n了解在了解在EclipseEclipse中使用中使用JUnitJUnit进进行行测试测试。3软件测试背景n n在在软软件开件开发过发过程中,除了程中,除了调试调试之外,之外,还还需要需要进进行行测试测试。n n调调试试和和测测试试是是不不同同的的概

2、概念念,调调试试是是对对成成品品进进行行试试运运行行,而而测测试试则则是是在在组组装装成成成成品品之之前前,利利用用一一些些工工具具,参参照照某某些些标标准,准,对对零部件零部件进进行行检测检测。n n在在JavaJava开开发发中,使用率最高的中,使用率最高的测试测试工具是工具是JUnitJUnit。4JUnit背景n nJUnitJUnit是是由由 ErichErich GammaGamma 和和 KentKent BeckBeck 编编写写的的一一个个回回归归测测试试框框架架(regressiontestingframeworkregressiontestingframework), ,

3、供供JavaJava开开发发人人员编员编写写单单元元测试测试之用。之用。n nJUnitJUnit测测试试是是程程序序员员测测试试,即即所所谓谓白白盒盒测测试试,因因为为程程序序员员知知道道被被测测试试的的软软件件如如何何(HowHow)完完成成功功能能和和完完成成什什么么样样(WhatWhat)的的功功能能。JUnitJUnit本本质质上上是是一一套套框框架架,即即开开发发者者制制定定了了一一套套条条条条框框框框,遵遵循循要要求求编编写写测测试试代代码码,如如继继承承某某个个类类,实实现现某某个个接接口口,就就可可以以用用JUnitJUnit进进行行自自动测试动测试了。了。n n由由于于JU

4、nitJUnit相相对对独独立立于于所所编编写写的的代代码码,测测试试代代码码的的编编写写可可以以先先于于实实现现代代码码的的编编写写,使使得得“ “极极限限开开发发” ”中中推推崇崇的的“ “testtestfirstfirstdesign”design”的的实实现现有有了了现现成成的的手手段段:用用JUnitJUnit写写测测试试代代码码,写写实实现现代代码码,运运行行测测试试,测测试试失失败败,修修改改实实现现代代码码,再再运运行行测测试试,直直到到测测试试成成功功。以以后后对对代代码码的修改和的修改和优优化,运行化,运行测试测试成功,成功,则则修改成功。修改成功。5JUnit简介n n

5、JUnitJUnit是是一一个个开开源源的的javajava单单元元测测试试框框架架。正正如如:“ “麻麻雀雀虽虽小小,五五脏脏俱全。俱全。” ”,JUnitJUnit功能非常功能非常强强大:大:n n(1 1)提提供供的的APIAPI可可以以让让用用户户写写出出测测试试结结果果明明确确的的可可重重用用单单元元测测试试用例。用例。n n(2 2)提供了三种方式来)提供了三种方式来显显示用示用户户的的测试结测试结果,而且果,而且还还可以可以扩扩展。展。n n(3 3)提供了)提供了单单元元测试测试用例成批运行的功能。用例成批运行的功能。n n(4 4)超)超轻轻量量级级而且使用而且使用简单简单,

6、没有商,没有商业业性的欺性的欺骗骗和无用的向和无用的向导导。n n(5 5)整个框架)整个框架设计设计良好,易良好,易扩扩展。展。n n对对不不同同性性质质的的被被测测对对象象,如如Class,Class, Jsp,Jsp, Servlet,Servlet, EjbEjb等等,JUnitJUnit有不同的支持方式。本有不同的支持方式。本节仅节仅以以ClassClass测试为测试为例。例。6JUnit和Eclipse的关系n n前前面面提提到到了了JUnitJUnit的的作作者者ErichErich GammaGamma,他他同同时时还还负负责责了了EclipseEclipse的开的开发发,包括

7、,包括JFaceJFace的开的开发发和和JDTJDT中一些工具的开中一些工具的开发发。n nKentKentBeckBeck则则是是极极限限开开发发的的倡倡导导者者,EclipseEclipse中中的的不不少少开开发发工工具具都都体体现现了了极极限限开开发发的的思思想想。ErichErichGammaGamma和和KentKentBeckBeck在在EclipseEclipse项项目目的的早早期期,写写了了多多本本关关于于EclipseEclipse的的图图书书,推推动动了了EclipseEclipse的普及。的普及。n nEclipseEclipse具具有有一一个个JUnitJUnit插插

8、件件,这这个个插插件件已已经经包包含含在在JDTJDT中中,实现实现了了JUnitJUnit的的GUIGUI界面。界面。这这个界面由个界面由JUnitJUnit视图实现视图实现。7JUnit配置n n由由于于EclipseEclipse中中集集成成了了JUnitJUnit,所所以以不不必必下下载载,如如果果想想要要最最新新的的JUnitJUnit类类库库可可以以在在互互联联网网上上下下载载,之之后后在在EclipseEclipse构构建建路路径径中中添添加加JUnitJUnit类类库库即即可。下面介可。下面介绍绍一下一下EclipseEclipse中如何配置中如何配置JUnitJUnit。n

9、n( 1 1) 右右 键键 单单 击击 项项 目目 “ “WebApplication”WebApplication”, 选选 择择 “ “BuildBuildPath”“ConfigurePath”“ConfigureBuildBuildPath”Path”菜菜单单命命令令,弹弹出出构构建建路路径径对对话话框框,选择选择“ “Libraries”Libraries”选项选项,如,如图图所示。所示。8JUnit配置n n(2 2)单单击击“ “AddAddExternalExternalJARs”JARs”可可以以添添加加额额外外的的JUnitJUnit类类库库。单单击击“ “AddAddLi

10、brary”Library”添添加加EclipseEclipse中中自自带带的的JUnitJUnit类类库库,如如图图所示。所示。9JUnit配置n n(3 3)选选择择“ “Junit”Junit”,单单击击“ “Next”Next”按按钮钮,出出现现添添加加类类库库对对话话框框,在在“ “JUnitJUnitlibrarylibraryversion”version”一一栏栏中中有有“ “JUnitJUnit3”3”和和“ “JUnit4”JUnit4”两个两个选项选项,本例中,本例中选择选择“ “JUnit4”JUnit4”如如图图所示。所示。10JUnit配置n n(4 4)单单击击“

11、 “Finish”Finish”按按钮钮,完完成成JUnitJUnit类类库库的的添添加加。如如图图所示,所示,JUnitJUnit类库类库已已经经加入当前加入当前项项目中了。目中了。11JUnit配置n n(5 5)单单击击“ “OK”OK”按按钮钮完完成成。此此时时在在包包资资源源管管理理器器视视图图(PackagePackageExplorerExplorer)中中可可以以看看到到JUnitJUnit类类库库信信息息,如如图图所所示。示。12准备要测试的类n n例如,在例如,在项项目中建立一个新的目中建立一个新的类类MoneyMoney。13新建单元测试n n一一个个单单元元测测试试用用

12、例例也也是是一一个个类类。往往往往对对应应一一个个特特定定的的待待测测类类。在。在JDTJDT中建立中建立单单元元测试测试是非常是非常简单简单的。的。14输入测试代码n n下下面面试试着着写写一一段段测测试试代代码码。如如下下面面代代码码那那样样,修修改改testAddtestAdd() ()方方法法,加加入入测测试试的的代代码码。测测试试的的过过程程是是:先先建建立立两两个个MoneyMoney对对象象,分分别别是是m12CHFm12CHF、m14CHFm14CHF。m12CHFm12CHF的的数数值值是是1212,m14CHFm14CHF的数的数值值是是1414。n n调调用用m12CHF

13、m12CHF的的addadd方方法法,与与m14CHFm14CHF相相加加,得得出出一一个个新新的的MoneyMoney对对象象resultresult。最最后后用用assertTrueassertTrue方方法法,验验证证得得出出的的resultresult的的值值是否与是否与预预期的期的expectedexpected对对象的象的值值相等。相等。15运行测试代码16运行单元测试n n修修改改完完成成后后,就就可可以以试试一一下下运运行行测测试试用用例例了了。运运行行测测试试用用例也是例也是RunRun命令,通命令,通过过工具工具栏栏上的上的RunRun按按钮执钮执行。行。17查看单元测试的

14、结果n n单单元元测测试试一一旦旦执执行行,测测试试的的结结果果就就可可以以在在JUnitJUnit视视图图上上清清晰晰地展地展现现出来。出来。18编写JUnit单元测试实例n n编编辑辑类类文文件件:新新建建一一个个类类文文件件JUnitExampleJUnitExample.java.java,该该类类中中只只有有一一个个方法方法speak()speak(),返回字符串,返回字符串“ “HelloWorld!”HelloWorld!”,代,代码码如下。如下。n npackagecom.myjunit.example;packagecom.myjunit.example;n npublicc

15、lassJUnitExamplepublicclassJUnitExamplen n /待待测试测试的方法,返回字符串的方法,返回字符串“ “Helloworld!”Helloworld!”n npublicStringspeak()publicStringspeak()n nreturnHelloworld!;returnHelloworld!;n n n n 19创建TestCase测试类n n现现在开在开发发JUnitJUnit的的“ “HelloWorld!”HelloWorld!”例子。例子。n n( 1 1) 建建 立立 测测 试试 。 在在 工工 程程 上上 单单 击击 右右 键

16、键 , 选选 择择“ “New”“Other”New”“Other”菜菜单单命命令令,展展开开“ “Java”Java”选选项项,选选择择“ “JUnit”“JUnitTestCase”JUnit”“JUnitTestCase”,如,如图图所示。所示。20创建TestCase测试类n n(2 2)单单击击“ “Next”Next”按按钮钮,弹弹出出新新建建JUnitJUnit测测试试案案例例对对话话框框。在在“ “Name”Name”一一栏栏中中填填入入测测试试案案例例的的名名字字 “ “TestGetHelloWorldPrompt”TestGetHelloWorldPrompt”, 在在“

17、 “ClassClassunderundertest”test”中中填填入入将将要要被被测试测试的的类类“ “com.myjunit.example.JUnitExample”com.myjunit.example.JUnitExample”。如。如图图所示。所示。21创建TestCase测试类(3)单击)单击“Next”按钮,弹出选择待测试方法对话框,选择按钮,弹出选择待测试方法对话框,选择“JUnitExample”类的类的“speak()”方法,单击方法,单击“Finish”按钮完按钮完成。编辑成。编辑“TestGetHelloWorldPrompt”类代码如下。类代码如下。packag

18、ecom.myjunit.test;importjunit.framework.TestCase;importcom.myjunit.example.JUnitExample;publicclassTestGetHelloWorldPromptextendsTestCasepublicvoidsetUp()throwsException/初始化初始化publicvoidtearDown()throwsException/撤销初始化撤销初始化publicvoidtestSpeak()/构造类构造类JUnitExample的实例测试的实例测试JUnitExamplejue=newJUnitExam

19、ple();/assertEquals方法是方法是JUnit提供的辅助函数,用于帮助确定某个被测试的函数是提供的辅助函数,用于帮助确定某个被测试的函数是/否正常工作,称为否正常工作,称为“断言断言”。assertEquals(expected,actual):):expected是是/期望值,期望值,actual是被测试代码实际产生的值是被测试代码实际产生的值assertEquals(Hellozzu!,jue.speak();22运行TestCase测试类n n右右键键单单击击工工程程,选选择择“ “RunRunAs”“JUnitAs”“JUnitTest”Test”选选项项,出出现现JUn

20、itJUnit视图视图,如,如图图所示。所示。23运行TestCase测试类n n可可以以看看到到JUnitJUnit视视图图中中出出现现一一个个红红条条,“ “Failures”Failures”为为1 1,说说明明测测试试失失败败了了,查查看看失失败败原原因因可可以以在在“ “FailureFailureTrace”Trace”中中查查找找信信息息。如如图图所所示示,说说明明测测试试数数据据与与实实际际数数据据不不一一致致,导导致致测试测试失失败败。比较测试数据与实际数据比较测试数据与实际数据24修改TestCase测试类n n下下面面,我我们们修修改改“ “JUnitExample”JU

21、nitExample”类类中中的的“ “speak”speak”方方法法,代代码码如下。如下。package com.myjunit.example;public class JUnitExample / 待测试的方法,返回字符串“Hello zzu!”public String speak() return Hello zzu!;25运行TestCase测试类n n再次运行再次运行测试测试。JUnitJUnit视图视图中出中出现现一个一个绿绿条,表明条,表明测试测试成功。成功。26成批运行TestCase测试类n n新新建建一一个个“ “JUnitJUnitTestTestSuite”Sui

22、te”类类,名名称称为为“ “AllTests”AllTests”,代代码码如如下。下。package com.myjunit.example;import org.junit.runner.RunWith;import org.junit.runners.Suite;import org.junit.runners.Suite.SuiteClasses;RunWith(Suite.class)SuiteClasses( TestGetHelloWorldPrompt.class )SuiteClasses( 其他测试类其他测试类.class )public class AllTests pa

23、ckagecom.myjunit.test;importjunit.framework.Test;importjunit.framework.TestCase;importjunit.framework.TestSuite;publicclassAllTestspublicstaticTestsuite()/构造TestSuite类,可以不带参数TestSuitesuite=newTestSuite(Testforcom.myjunit.test);/$JUnit-BEGIN$/*此处可以添加多个JUnittest。本例中只是使用了前面的一个测试例子。运行AllTests时就可以测试多个JUn

24、ittest,测试失败的JUnittest不会影响其他的JUnittest测试*/suite.addTestSuite(TestGetHelloWorldPrompt.class);/*suite.addTestSuite(其他测试类.class);*/$JUnit-END$returnsuite;27成批运行TestCase测试类n n右右键键单单击击类类“ “AllTests”AllTests”,选选择择“ “RunRunAs”“JUnitAs”“JUnitTest”Test”菜菜单单命命令,令,结结果如果如图图所示。所示。28JUnit知识要点n n1 1JUnitJUnit中的初始化与

25、撤中的初始化与撤销销n n在在“ “TestGetHelloWorldPrompt”TestGetHelloWorldPrompt”类类中中,我我们们可可以以看看到到有有setUpsetUp与与tearDowntearDown两两个个方方法法,这这两两个个方方法法是是junitjunitframework.TestCaseframework.TestCase中中提提供供初初始始化化和和反反初初始始化化每每个个测测试试的的方方法法。setUpsetUp方方法法:在在每每个个测测试试方方法法调调用用前前被被调调用用,负负责责初初始始化化测测试试方方法法所所需需要要的的测测试试环环境境;tearDo

26、wntearDown方方法法:在在每每个个测测试试方方法法被被调调用用之之后后被被调调用用,负负责责撤撤销销测测试试环环境境。它它们们与与测测试试方法的关系可以描述如下:方法的关系可以描述如下:n n测试测试开始开始setUptestXXXtearDownsetUptestXXXtearDown测试结测试结束。束。n n在在setUpsetUp和和tearDowntearDown中中的的代代码码是是不不应应该该与与测测试试方方法法相相关关的的,而而应应该该是是全全局局相相关关的的。例例如如对对于于测测试试方方法法A A和和B B,在在setUpsetUp和和tearDowntearDown中中

27、的的代代码应该码应该是是A A和和B B都需要的代都需要的代码码。29n n2 2JUnitJUnit的各种断言的各种断言n nJUnitJUnit为为我我们们提提供供了了一一些些辅辅助助函函数数,它它们们用用来来帮帮助助我我们们确确定定被被测测试试的的方方法法是是否否按按照照预预期期的的效效果果正正常常工工作作,通通常常,把把这这些些辅辅助助函函数数称称为为断断言。下面介言。下面介绍绍一下一下JUnitJUnit的各种断言。的各种断言。n nassertEqualsassertEqualsn n函数原型函数原型1 1:assertEquals(Stringmessage,expected,a

28、ctual)assertEquals(Stringmessage,expected,actual)n n参数参数说说明:明:messagemessage是一个可是一个可选选的消息,如果提供,将会在的消息,如果提供,将会在发发生生错误时报错误时报告告这这个消息。个消息。n nexpectedexpected是期望是期望值值,通常都是用,通常都是用户户指定的内容。指定的内容。n nactualactual是被是被测试测试的代的代码码返回的返回的实际值实际值。n n函数原型函数原型2 2:assertEquals(Stringmessage,expected,actual,tolerance)ass

29、ertEquals(Stringmessage,expected,actual,tolerance)n n参数参数说说明:明:messagemessage是一个可是一个可选选的消息,如果提供,将会在的消息,如果提供,将会在发发生生错误时报错误时报告告这这个消息。个消息。n nexpectedexpected是期望是期望值值,通常都是用,通常都是用户户指定的内容。指定的内容。n nactualactual是被是被测试测试的代的代码码返回的返回的实际值实际值。n ntolerancetolerance是是误误差参数,参加比差参数,参加比较较的两个浮点数在的两个浮点数在这这个个误误差之内差之内则则会

30、被会被认为认为是相等的。是相等的。JUnit知识要点知识要点30n nassertTrueassertTruen n函数原型:函数原型:assertTrue(Stringmessage,Booleancondition)assertTrue(Stringmessage,Booleancondition)n n参数参数说说明:明:messagemessage是一个可是一个可选选的消息,如果提供,将会在的消息,如果提供,将会在发发生生错误时报错误时报告告这这个消息。个消息。n nconditioncondition是待是待验证验证的布的布尔尔型型值值。n n该该断断言言用用来来验验证证给给定定的的

31、布布尔尔型型值值是是否否为为真真,如如果果结结果果为为假假,则则验验证证失失败败。当当然然,还还有有验验证证为为假假的的测试测试条件:条件:n n函数原型:函数原型:assertFalse(Stringmessage,Booleancondition)assertFalse(Stringmessage,Booleancondition)n n该该断言用来断言用来验证给验证给定的布定的布尔尔型型值值是否是否为为假,如果假,如果结结果果为为真,真,则验证则验证失失败败。n nassertNullassertNulln n函数原型:函数原型:assertNull(Stringmessage,Obje

32、ctobject)assertNull(Stringmessage,Objectobject)n n参数参数说说明:明:messagemessage是一个可是一个可选选的消息,如果提供,将会在的消息,如果提供,将会在发发生生错误时报错误时报告告这这个消息。个消息。n nobjectobject是待是待验证验证的的对对象。象。n n该该断断言言用用来来验验证证给给定定的的对对象象是是否否为为nullnull,如如果果不不为为nullnull,则则验验证证失失败败。相相应应地地,还还存存在在可可以以验验证证非非nullnull的断言:的断言:n n函数原型:函数原型:assertNotNull(S

33、tringmessage,Objectobject)assertNotNull(Stringmessage,Objectobject)n n该该断言用来断言用来验证给验证给定的定的对对象是否象是否为为非非nullnull,如果,如果为为nullnull,则验证则验证失失败败。JUnit知识要点知识要点31n nassertSameassertSamen n函数原型:函数原型:assertSame(Stringmessage,expected,actual)assertSame(Stringmessage,expected,actual)n n参数参数说说明:明:messagemessage是一

34、个可是一个可选选的消息,如果提供,将会在的消息,如果提供,将会在发发生生错误时报错误时报告告这这个消息。个消息。n nexpectedexpected是期望是期望值值。n nactualactual是被是被测试测试的代的代码码返回的返回的实际值实际值。n n该该断断言言用用来来验验证证expectedexpected参参数数和和actualactual参参数数所所引引用用的的是是否否是是同同一一个个对对象象,如如果果不不是是,则则验证验证失失败败。相。相应应地,也存在地,也存在验证验证不是同一个不是同一个对对象的断言:象的断言:n n函数原型:函数原型:assertNotSame(String

35、message,expected,actual)assertNotSame(Stringmessage,expected,actual)n n该该断断言言用用来来验验证证expectedexpected参参数数和和actualactual参参数数所所引引用用的的是是否否是是不不同同对对象象,如如果果所所引引用用的的对对象相同,象相同,则验证则验证失失败败。n nFailFailn n函数原型:函数原型:Fail(Stringmessage)Fail(Stringmessage)n n参数参数说说明:明:messagemessage是一个可是一个可选选的消息,如果提供,将会在的消息,如果提供,将

36、会在发发生生错误时报错误时报告告这这个消息。个消息。n n该该断言会使断言会使测试测试立即失立即失败败,通常用在,通常用在测试测试不能达到的分支上(如异常)。不能达到的分支上(如异常)。JUnit知识要点知识要点32JUnit知识要点n n3 3建立建立测试测试案例的步案例的步骤骤n n建立一个建立一个junit.framework.TestCasejunit.framework.TestCase的的实实例。例。n n定定义义一些以一些以“ “test”test”开开头头的无返回方法的无返回方法testXXXtestXXX(例如(例如testShowtestShow,testSaytestSa

37、y等)。等)。n n在在testXXXtestXXX方方法法中中调调用用assertEquals()assertEquals()方方法法,它它用用来来比比较较我我们们预预期期的的值值和和由由要要测测试类试类的方法返回的的方法返回的值值。 n n运行运行测试测试。n n4 4Errors,FailuresErrors,Failures统计统计的区的区别别n nFailuresFailures是是单单元元测测试试所所期期望望发发生生的的错错误误,它它预预示示软软件件代代码码有有bugbug,不不过过也也可可能能是是单单元元测试测试代代码码有有逻辑错误逻辑错误(注意是(注意是逻辑错误逻辑错误)。)。

38、n nErrorsErrors最好不要出最好不要出现现,如果,如果发发生了生了ErrorError可以按照下面的可以按照下面的顺顺序来序来检查检查:n n检查测试检查测试所需的所需的环环境,如:数据境,如:数据库连库连接。接。n n检查单检查单元元测试测试代代码码。n n检查检查系系统统代代码码。 33本章小节n n介介绍绍了了单单元元测试测试的概念;的概念;n n讲讲述了述了JUnitJUnit单单元元测试测试基基础础;n n介介绍绍了了JUnitJUnit中常用的中常用的类类;n n介介绍绍了了EclipseEclipse中中 JUnitJUnit的配置;的配置;n n讲讲述了如何在述了如何在 EclipseEclipse中使用中使用 JUnitJUnit进进行行测试测试。34谢谢大家!

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号