版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七章
Junit自动化测试工具主讲人:邢慧芬内容提要7.1Junit简介7.1.1Junit简介7.1.2Junit的安装
7.2Junit框架7.2.1
软件自动化测试框架7.2.2JUnit核心类及接口7.2.3JUnit单元测试的步骤
7.3Eclipse中Junit的使用内容提要7.1Junit简介7.1.1Junit简介7.1.2Junit的安装
7.2Junit框架7.2.1
软件自动化测试框架7.2.2JUnit核心类及接口7.2.3JUnit单元测试的步骤
7.3Eclipse中Junit的使用内容回顾——单元测试单元测试集成测试功能测试压力/负荷测试验收测试单元测试单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为单元测试两个重要的慨念桩模块(stub):指模拟被测模块所调用的模块驱动模块(Driver):指模拟被测模块的上级模块。驱动模块常用来接受测试数据,启动被测模块并输出结果。单元测试的方法人工静态分析:通过人工阅读代码的方式来查找代码中存在的错误自动静态分析:使用代码复查工具,主要用来发现语法特征错误自动动态测试:用工具自动生成测试用例并执行被测程序,主要用来发现行为特征错误人工动态测试:人工设定程序的输入和预期输出,执行程序,判断实际输出是否符合预期,若不符则自动报告错误。利用JUnit完成的便是人工动态测试单元测试的必要性带来比功能测试更广范围的测试覆盖让团队协作成为可能能够防止衰退,降低对调试的需要能为我们带来重构的勇气能改进实现设计当作开发者文档使用内容提要7.1Junit简介7.1.1Junit简介7.1.2Junit的安装
7.2Junit框架7.2.1
软件自动化测试框架7.2.2JUnit核心类及接口7.2.3JUnit单元测试的步骤
7.3Eclipse中Junit的使用7.1.1Junit简介JUnit是Java社区中知名度最高的单元测试工具。由ErichGamma和KentBeck共同开发完成Junit在代码驱动单元测试框架家族里无疑是最为成功的一例。在“最佳Java性能监视/测试工具”类别里,多次获得“JavaWorld编者精品奖(Editors’ChoiceAwards)”。开源软件支持语言Smalltalk,Java,C++,Perl等等支持的IDEJBuilder,VisualAge,Eclipse等JUnit功能可供选择的其他前端或者test-runner,用来显示你的测试结果用单独的classloader来运行每个单元测试,以避免副作用标准的资源初始化和回收方式(setUp和tearDown)各种不同的assert方法,让你检查测试结果的操作变得更容易同流行的工具,比如Ant,以及流行IDE比如Eclipse,JBuilder整合JUnit的好处开源工具,可以免费使用,可以找到很多实际项目中的应用示例。由于源码开放,开发者还可以根据需要扩展JUnit功能可以将测试代码和产品代码分开测试代码编写容易,功能强大自动检验结果并且提供立即的反馈易于集成到开发的构建过程中,在软件的构建过程中完成对程序的单元测试测试包结构便于组织和集成运行,支持图形交互模式和文本交互模式内容提要7.1Junit简介7.1.1Junit简介7.1.2Junit的安装
7.2Junit框架7.2.1
软件自动化测试框架7.2.2JUnit核心类及接口7.2.3JUnit单元测试的步骤
7.3Eclipse中Junit的使用7.1.2Junit的安装Java的JUnit网上免费下载地址http:///projects/junit/7.1.2Junit的安装解包JUnit:
文件/目录描述junit.jarJUnit框架结构、扩展和测试运行器的二进制发布src.jarJUnit的源代码,包括一个
Ant的buildfile文件junit是个目录,内有JUnit自带的用JUnit编写的测试示例程序javadocJUnit完整的API文档doc一些文档和文章,包括“TestInfected:ProgrammersLoveWritingTests”和其它一些资料,可以帮助我们入门。7.1.2Junit的安装要安装和使用JUnit是很容易的,只需三个步骤:(1)下载JUnit软件(junit4.10.zip);(2)将下载的junit.zip解压到你指定的目录(C:\junit4.10)(3)设置环境变量Variable:CLASSPATHVariableValue:.;InstallPath/junit.jar(.;C:\junit4.10\junit-4.10.jar)7.1.2Junit的安装测试运行(进入命令提示符安装目录下)javajunit.textui(swingui,awtui).TestRunnerjunit.samples.AllTests内容提要7.1Junit简介7.1.1Junit简介7.1.2Junit的安装
7.2Junit框架7.2.1
软件自动化测试框架7.2.2JUnit核心类及接口7.2.3JUnit单元测试的步骤
7.3Eclipse中Junit的使用内容提要7.1Junit简介7.1.1Junit简介7.1.2Junit的安装
7.2Junit框架7.2.1
软件自动化测试框架7.2.2JUnit核心类及接口7.2.3JUnit单元测试的步骤
7.3Eclipse中Junit的使用7.2.1软件自动化测试框架Junit框架是一个典型composite模式,TestSuite可以容纳任何派生自test的对象,当调用TestSuite对象run()方法时,会遍历自己容纳的对象,逐个调用它们的run()方法。TestCase:测试用例,是对测试目标进行测试的方法和过程集合TestSuite:测试包,是测试用例的集合,可容纳多个测试用例;TestResult:测试结果的描述记录;TestListener:测试过程中的事件监听者。7.2.1软件自动化测试框架7.2.1软件自动化测试框架每个测试方法所发生与预期不一致的状况描述,称其测试失败元素(TestFailure)。其中TestCase是框架的核心,它建立了TestCase和TestSuite之间的关联,为整个框架做了扩展预留。其余的类用来支援TestCase,TestSuite用来聚合多个TestCase,Assert类实现期望值(expected)和实际值(actual)的验证,TestResult收集所有测试用例执行的后果。内容提要7.1Junit简介7.1.1Junit简介7.1.2Junit的安装
7.2Junit框架7.2.1
软件自动化测试框架7.2.2JUnit核心类及接口7.2.3JUnit单元测试的步骤
7.3Eclipse中Junit的使用JUnit核心类及接口(1)JUnit核心类及接口(2)TestRunner(测试运行器)没有TestRunner接口,只有一个所有TestRunner都继承的BaseTestRunner执行测试并提供相关的结果的统计信息包含三个TestRunner类一个用于文本控制台一个用于Swing还有一个AWT(遗产代码,很少有人用)JUnit核心类及接口(3)TestRunner(测试运行器)实际运用中的SwingtestrunnerGreenbar通过测试Redbar测试失败JUnit核心类及接口(3)JUnit核心类及接口(3)JUnit核心类及接口(4)TestCase(测试用例)用抽象类来定义测试中的固定方法。TestCase是Test接口的抽象实现。Test接口是运行和收集测试的结果,它使用了Composite设计模式,Test接口定义了两个方法:PublicintcountTestCase():统计执行测试用例(TestCase)的数量。如果是测试包则返回整个包中所有测试用例的统计值。Publicvoidrun(TestResult):TestResult参数用来启动测试,记录测试过程JUnit核心类及接口(5)TestCase(测试用例)把具有公共行为的测试归入一组扩展了JUnit的TestCase类的类。它以testXXX方法的形式包含一个或多个测试典型的TestCase包含两个主要部件Fixture测试固件释放资源,一个测试用例可以包含若干个testXxx()测试方法,测试用例测试一个或多个类API接口的正确性,当然在调用类API时,需要事先创建这个类的对象及一些关联的对象,这组对象就称为测试固件(Fixture),相当于测试用例的“工作对象”单元测试JUnit核心类及接口(6)TestCase(测试用例)Fixture管理资源,复用配置代码运行一个或多个测试所需的公用资源或者数据集合TestCase通过setUp和tearDown方法来创建和销毁fixture典型应用数据库连接,生成输入文件JUnit核心类及接口(7)TestCase(测试用例)创建单元测试方法继承自TestCase的一组assert方法封装了最常见的测试任务,这些assert方法可以极大地简化单元测试的编写Assert超类所提供的8个核心方法JUnit核心类及接口(8)TestCase(测试用例)创建单元测试方法除了Assert提供的方法之外,TestCase还实现了10个它自己的方法coutTestCases,CreateResult,getName,run,runBare,setName,setup,teardown,toStringTestCase的10个自己的方法JUnit核心类及接口(9)TestCase(测试用例)这18个方法共同为你提供了使用JUnit编写测试的全部功能一个简单的实例(1)publicclassSampleCaculator{ //计算两整数之和
publicintadd(intaugend,intaddend){ returnaugend+addend; } //计算两整数之差
publicintsubtration(intminuend,intsubtrahend){ returnminuend-subtrahend; }}一个简单的实例(2)importjunit.framework.*;publicclassSampleCaculatorTestextendsTestCase{ SampleCalculatorcalculator=newSampleCalculator(); publicvoidtestAdd(){ intresult=calculator.add(50,20); assertEquals(70,result); } publicvoidtestSubtration(){ intresult=calculator.subtration(50,20); assertEquals(30,result); }}编写TestCase子类注意事项:编写TestCase的子类时,需要注意以下事项:编写的测试类必须继承于TestCase抽象类一次测试只测试一个对象,一个测试方法之测试一个对象中的方法最好在Assert函数中给出失败的原因,这样有助于查错在setUp和tearDown中的代码不应该与测试有关,而应与全局有关扩展了JUnit的TestCase类的类。它以testXXX方法的形式包含一个或多个测试方法Junit测试过程TestCase实例被运行时,依照以下步骤运行:
1.创建测试用例的实例。
2.调用setUp()方法,执行一些初始化工作
3.运行testXxx()测试方法。
4.调用tearDown()方法,执行销毁对象。JUnit核心类及接口(10)TestSuite(测试集合)testsuite是把多个相关测试归入一组便捷方式若你没有提供自己的TestSuite,testrunner会自动创建一个缺省的TestSuite不能满足时,可能会想组合多个suite,把它们作为主suite的一部分,这些suite来自几个不同的packageJUnit核心类及接口(11)TestSuite(测试集合)通常情况下TestAll类仅仅包括一个静态的suite方法,这个方法会注册应用程序需要定期执行的所有Test对象(包括TestCase对象和TestSuite对象),下面是一个典型的TestAll类TestAll类importjunit.framework.Test;importjunit.framework.TestSuite;importjunitbook.sampling.TestDefaultController;publicclassTestAllextendTestCase{publicstaticTestsuite(){TestSuitesuite=newTestSuite("Alltestsfrompart1");suite.addTestSuite(SampleCaculatorTest.class);suite.addTestSuite(TestDefaultController.class);returnsuite;}}TestSuite处理测试用例的6个公约测试用例必须是共有类(Public)测试用例必须继承于TestCase类测试用例的测试方法必须是共有的(Public)测试用例的测试方法必须被声明为Void测试用例的测试方法的前置名词必须是Test测试用例的测试方法无任何传递参数JUnit核心类及接口(12)TestResult所有的TestSuite都有一个对应的TestResult负责收集TestCase的执行结果。储存了所有测试的详细情况,是通过还是失败。失败则会创建一个TestFailure对象TestRunner使用TestResult来报告测试结果。没有TestFailure对象进度条就用绿色,否则进度条用红色并输出失败测试的数目和他们的stacktrace,将测试结果转发到TestListener处理JUnit核心类及接口(13)TestResultJUnit区分失败和错误失败:是可以预期的,代码的改变不时会造成断言失败,你只要修正代码,断言就可以再次通过错误:比如常规程序抛出的异常,则是测试时不可预料的JUnit核心类及接口(14)TestListener帮助对象访问TestResult并创建有用的报告。虽然Testlistener接口是JUnit框架的重要部分,但是你编写自己的测试时不必实现这个接口。只有需要扩展JUnit框架时才会需要实现这个接口TestFailure是“失败”状况的收集类,解释每次测试执行过程中出现的异常情况。其toString()方法返回“失败”状况的简要描述内容提要7.1Junit简介7.1.1Junit简介7.1.2Junit的安装
7.2Junit框架7.2.1
软件自动化测试框架7.2.2JUnit核心类及接口7.2.3JUnit单元测试的步骤
7.3Eclipse中Junit的使用JUnit单元测试的步骤创建一个继承自junit.framework.TestCase的类创建一个以“test”名字开头的publicvoid方法Ex:publicvoidtestDeleteCustomer()使用诸如assertEquals()的方法测试执行结果JUnit单元测试的步骤(1)JUnit成员三重唱,共同产生测试结果当你需要编写更多的TestCase的时候,你可以创建更多的TestCase对象。当你需要一次执行多个TestCase对象的时候,您可以创建一个TestSuite对象或使用缺省的TestSuite对象进行封装。为了执行TestSuite,需要使用TestRunner。通过TestRunner的执行生成TestResult对象JUnit单元测试的步骤(2)重载setUp(),封装测试环境初始化及测试数据准备设计测试方法,以testXXX命名在测试方法中使用断言方法如assertEquals(),assertTrue()等设计测试套件,或使用缺省的测试套件,调用TestRunner执行测试脚本,生成测试结果重载tearDown()析构测试环境,执行收尾动作待测类public
class
Calculator{public
int
add(inta,intb){ returna+b;}public
int
minus(inta,intb){ returna-b;}public
int
multiply(inta,intb){ returna*b;}public
int
divide(inta,intb)throwsException{if(0==b){ throw
newException("除数不能为零!");}returna/b;}}该类的测试类[1/4]public
class
CalculatorTest
extends
TestCase{ privateCalculatorcal; public
void
setUp(){ cal=newCalculator(); } public
void
tearDown(){
}测试类必须以TestCase为父类
每个测试方法执行前都会调用该方法析构测试环境,执行收尾动作生成对象该类的测试类[2/4]
public
void
testAdd(){
intresult=cal.add(1,2);
Assert.assertEquals
(3,result); } public
void
testMinus(){
intresult=cal.minus(1,2);
Assert.assertEquals(-1,result); } public
void
testMultiply(){
intresult=cal.multiply(2,3);
Assert.assertEquals(6,result);
}Junit4测试方法需满足:1)Public的2)Void的3)无方法参数4)方法名称必须以test开头断言调用该方法该类的测试类[3/4]
public
void
testDivide(){
intresult=0; try{ result=cal.divide(6,4); } catch(Exceptione){
e.printStackTrace();
Assert.fail(); }
Assert.assertEquals(1,result);
}期望该行代码永远不会被执行,断言失败,停止执行立即失败该类的测试类[4/4]
public
void
testDivide2(){
Throwable
tx=null; try{ cal.divide(4,0); Assert.fail();
}
catch(Exceptionex){
tx=ex; }
Assert.assertNotNull(tx);
Assert.assertEquals(Exception.class,tx.getClass());
Assert.assertEquals("除数不能为零!",tx.getMessage()); }}一个方法可以有多个测试方法,输入的不同情况会有不同的testcase出现tx是Exception类型的一旦发生异常,则tx一定不为空期望该行代码永远不会被执行,断言失败,停止执行立即失败同时测试多个类(1)现有两个测试类CalculatorTest.javaLargestTest.java如何一下全部运行?如何自动化测试?同时测试多个类(2)public
class
TestAll
extends
TestCase{ public
staticTestsuite() {
TestSuitesuite=new
TestSuite();
suite.addTestSuite(CalculatorTest.class);
suite.addTestSuite(LargestTest.class); return
suite; }}必须是static返回一个Test类型方法名必须是suite生成一个TestSuite测试类对应的class对象,还可增加TestSuite的对象返回suite,TestSuite
实现了Test接口内容提要7.1Junit简介7.1.1Junit简介7.1.2Junit的安装
7.2Junit框架7.2.1
软件自动化测试框架7.2.2JUnit核心类及接口7.2.3JUnit单元测试的步骤
7.3Eclipse中Junit的使用7.3Eclipse中Junit的使用首先新建一个项目叫JUnit_Test,我们编写一个Calculator类,这是一个能够简单实现加减乘除、平方、开方的计算器类,然后对这些功能进行单元测试。这个类并不是很完美,我们故意保留了一些Bug用于演示,这些Bug在注释中都有说明。该类代码如下:package.chu;publicclassCalculator{privatestaticintresult;//静态变量,用于存储运行结果
publicvoidadd(intn){
result=result+n;}publicvoidsubstract(intn){
result=result-1;//Bug:正确的应该是result=result-n}publicvoidmultiply(intn){}//此方法尚未写好
publicvoiddivide(intn){
result=result/n;}publicvoidsquare(intn){
result=n*n;}publicvoidsquareRoot(intn){for(;;);//Bug:死循环
}publicvoidclear(){//将结果清零
result=0;}publicintgetResult(){returnresult;}}在Eclipse下使用JUnit(1)单元测试代码把它和被测试代码混在一起,这显然会照成混乱建议您分别为单元测试代码与被测试代码创建单独的目录,并保证测试代码和被测试代码使用相同的包名。这样既保证了代码的分离,同时还保证了查找的方便遵照这条原则,我们在项目JUnit_Test根目录下添加一个新目录testsrc,并把它加入到项目源代码目录中在Eclipse下使用JUnit(2)将JUnit4单元测试包引入这个项目:在该项目上点右键,点“属性”,如图:第二步,将JUnit4单元测试包引入这个项目:在该项目上点右键,点“属性”,如图:在弹出的属性窗口中,首先在左边选择“JavaBuildPath”,然后到右上选择“Libraries”标签,之后在最右边点击“AddLibrary…”按钮,如下图所示:然后在新弹出的对话框中选择JUnit4并点击确定,如上图所示,JUnit4软件包就被包含进我们这个项目了。在Eclipse下使用JUnit(3)在类上右击,选择“new”->“JUnitTestCase”新建一个CalculatorTest类,用来测试Calculator类选择刚刚建立的文件夹“JUnit_Test/testscr”,选中setUp()和tearDown(),然后点击“Next”选择要测试的方法,我们仅对“加、减、乘、除”四个方法进行测试点击“finish”,跳出需要添加JUnit.jar包,点击“OK”在Eclipse下使用JUnit(4)之后系统会自动生成一个新类CalculatorTest,里面包含一些空的测试用例。你只需要将这些测试用例稍作修改即可使用。完整的CalculatorTest代码如下:package.chu;importstaticorg.junit.Assert.*;importorg.junit.After;importorg.junit.Before;importorg.junit.Ignore;importorg.junit.Test;publicclassCalculatorTest{privatestaticCalculatorcalculator=newCalculator();@BeforepublicvoidsetUp()throwsException{
calculator.clea
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 幼儿园世界读书日颁奖活动
- 阴式手术在妇科良性肿瘤的临床应用分析
- 无人船自主靠泊规划与控制方法研究
- 小学高铁安全左手宣传
- 2025版物联网项目担保回购合同模板3篇
- 二零二五版个人购房贷款贷款期限延长协议4篇
- 二零二五版建筑工程施工合同履约担保流程规范3篇
- 2025版砼烟囱新建施工规范编制与培训合同3篇
- 二零二五年度个人债务催收代理合同6篇
- 二零二五年度个人房产买卖环保评估协议3篇
- 南通市2025届高三第一次调研测试(一模)地理试卷(含答案 )
- 2025年上海市闵行区中考数学一模试卷
- 2025中国人民保险集团校园招聘高频重点提升(共500题)附带答案详解
- 重症患者家属沟通管理制度
- 法规解读丨2024新版《突发事件应对法》及其应用案例
- IF钢物理冶金原理与关键工艺技术1
- JGJ46-2024 建筑与市政工程施工现场临时用电安全技术标准
- 销售提成对赌协议书范本 3篇
- 劳务派遣招标文件范本
- EPC项目阶段划分及工作结构分解方案
- 《跨学科实践活动4 基于特定需求设计和制作简易供氧器》教学设计
评论
0/150
提交评论