snl编译器实现开发junit_第1页
snl编译器实现开发junit_第2页
snl编译器实现开发junit_第3页
snl编译器实现开发junit_第4页
snl编译器实现开发junit_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

1、如何利用如何利用JUnit进行单元测试进行单元测试 组员 :代巧玲 胡健楠 孙东银 黄珊珊Q1.四种java测试工具简介 java的测试工具有很多,其中以JUnit为基础的测试框架共有4中,分别是JUnit HttpUnit、jWebUnit、以及StructsTestCase(框架测试用例)概念 1、白盒测试把测试对象看作一个打开的盒子,程序内部的逻辑结构和其他信息对测试人员是公开的,一般程序员进行的是白盒测试。 2、黑盒测试也称功能测试,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软

2、件界面和软件功能进行测试。Q1.四种java测试工具简介 1.JUnit JUnit 是一个开发源代码的Java测试框架,用于编写和运行可重复的测试。它是用于单元测试框架体系xUnit的一个实例。主要用于白盒测试。Q1.四种java测试工具简介 2.HttpUnit HttpUnit是在JUnit之上构建的测试框架,它支持web应用的黑盒测试。它是一种功能测试工具,你可以用它验证软件是否符合业务需求等web应用功能。Q1.四种java测试工具简介 3.jWebUnit jWebUnit是在HttpUnit上创建的一个辅助工具包,它减少测试web程序需要你写的代码。简单的说,你可以把它当作Htt

3、pUnit的宏程序库,提供到HttpUnit代码段的快捷方式,它简化了web程序测试的代码。Q1.四种java测试工具简介 4.StructsTestCase StructsTestCase是为测试Structs应用在JUnit基础上创建的测试框架。因为使用Structs会使web程序容器间(in-container)的功能测试和单元测试变得复杂,StructsTestCase就是专为Struts程序的的容器间测试设计的。如何利用如何利用JUnit进行单元测试进行单元测试Q2.理解“单元测试(Unit Testing)” 什么是单元测试?什么是单元测试? 单元测试是最小粒度的测试,以测试某个功

4、能或代码块。一般由程序员来做,因为它需要知道内部程序设计和编码的细节,也就是说单元测试是白盒测试。Q2.理解“单元测试(Unit Testing)” 为什么要做单元测试?为什么要做单元测试? 单元测试的目的,是将应用程序的所有源代码,隔离成最小的可测试的单元,保证每个单元的正确性。理想情况下,如果每个单元都能保证正确,就能保证应用程序整体相当程度的正确性。Q2.理解“单元测试(Unit Testing)” 怎么做单元测试?怎么做单元测试? step1.配备软件和环境 step2.建立java项目并添加JUnit库 step3.修改项目目录,建立src和testsrc目录,并分别在目录下建立同名

5、的包 step4.选取要测试的源文件,将其放置在src中 step5.编写对应单元的测试用例(Test Case)存在testsrc中 step6.进行测试,根据测试结果更改相应单元的源代码JUnit单元测试step1 我们需要配备以下软件:我们需要配备以下软件: 1.Eclipse:最为流行的 IDE,它全面集成了 JUnit,并从版本 3.2 开始支持 JUnit 4。 2.Ant:Ant是Annotation(注释)的缩写,它是基于 Java 的开源构建工具,Eclipse 中已经集成了 Ant。 3.JUnit:它的官方网站是 。 若使用Eclipse,则无需配置和下载。JUnit单元

6、测试step2 建立建立java项目并添加项目并添加JUnit库:库: How: 1.创建一个项目命名为test 2.单击右键选择“属性”选项 3.单击界面左侧的“Java Build Path” 4.选择右侧子页面的“Add Library” 5.将juint4添加到项目test下JUnit单元测试step2JUnit单元测试step3 修改项目目录修改项目目录,建立建立src和和testsrc,并分别建立同名包:,并分别建立同名包: Why:为什么分别建立src和testsrc? 答:我们要将源代码和测试代码分别存储,防止它们发生混淆。并且单元测试代码是不会出现在最终产品中的,所以建议分开

7、存储。 Why:为什么建立同名的package? 答:JUnit测试的思想就是在测试代码中设定某一输入值,将其作为参数传入源代码中,获得测试结果,将测试结果与设定好的理想正确值做匹配,若完全匹配,则测试通过。也就是说,测试文件中,必然会调用源代码中的方法,向其传入参数,因此必须使用相同的package名,方便查找文件和方法的调用。JUnit单元测试step3 修改项目目录修改项目目录,建立建立src和和testsrc,并分别建立同名包:,并分别建立同名包: Why:为什么建立保持代码的隔离性,防止发生混乱 How: 1.选择项目Test,并单击右键选择“属性” 2.选择“Java Build

8、Path”,并单击“source”选项 3.选择“Add Folder”选项 4.选择“Create New Folder”并为其命名为testsrc 5.在testsrc目录下建立与src同名的packageJUnit单元测试step3JUnit单元测试step4 选取要测试的单元,将源文件放置在选取要测试的单元,将源文件放置在src中中: 选取要测试的单元,将其存储在src目录下即可,例如命名为A.java文件。JUnit单元测试step5 编写对应单元的测试用例存在编写对应单元的测试用例存在testsrc中中:编写测试用例前,我们需要了解以下知识:编写测试用例前,我们需要了解以下知识:从

9、从JUnit4开始,开始,JUnit不再要求测试用例继承不再要求测试用例继承TestCase基基类,不再要求测试方法以类,不再要求测试方法以test开头。但为了让开头。但为了让JUnit发现发现系统的测试用例和测试方法,系统的测试用例和测试方法,JUnit提供了提供了Annotation修饰如下:(修饰如下:(Annotation中文译为注释)中文译为注释)Test:所有希望被运行的测试方法都应该使用该所有希望被运行的测试方法都应该使用该AnnotationBefore:如果希望每次运行测试方法之前先运行指定的回如果希望每次运行测试方法之前先运行指定的回收资源的方法,则该回收资源的方法使用收资

10、源的方法,则该回收资源的方法使用Before Annotation修饰修饰.After:如果希望每次运行测试方法之后运行指定的回收如果希望每次运行测试方法之后运行指定的回收资源的方法,则该回收资源的方法使用资源的方法,则该回收资源的方法使用After Annotation修饰修饰.Ignore:如果希望如果希望Junit忽略某个被测试的方法,可以使忽略某个被测试的方法,可以使用用Ignore Annotaion来修饰来修饰.JUnit单元测试step5 编写对应单元测试用例存在编写对应单元测试用例存在testsrc中中:编写测试用例时,我们需要遵守如下规则编写测试用例时,我们需要遵守如下规则:

11、(1)测试用例类使用测试用例类使用public修饰修饰(2)测试用例的测试方法使用测试用例的测试方法使用public修饰修饰(3)测试用例的测试方法的返回值应该是测试用例的测试方法的返回值应该是void(4)测试用例中测试方法不应该有任何参数测试用例中测试方法不应该有任何参数JUnit单元测试step5 编写对应单元测试用例存在编写对应单元测试用例存在testsrc中中:按照以上JUnit4的单元测试用例的编写规则,生成单元测试用例,存储在testsrc目录下,例如命名为TestA.java。JUnit单元测试step6 进行测试,根据测试结果更改源文件中的相应进行测试,根据测试结果更改源文件

12、中的相应单元代码单元代码: 点击“Run As”选择“JUnit Test”,进行测试。 若出现如图所示结果: 则表示测试成功,该单元的代码已经达到要求,无需修改。JUnit单元测试step6 进行测试,根据测试结果更改源文件中的相应进行测试,根据测试结果更改源文件中的相应单元代码单元代码: 若出现如图所示结果: 则表示测试不成功JUnit单元测试step6 不成功 Error:由测试用例代码异常引起,也就是测试用例代码本身编写问题。 Failure:由JUnit中用做匹配判定的函数引起,此时说明测试代码的逻辑是正确的,但通过传测试参数进源代码得到的结果,和理想中的结果不匹配,因此测试不成功,

13、也就是说源代码方法有问题。例子测试词法分析中的Token类我们小组是以词法分析中Token类为测试对象。目的是测试Token类中的几种方法在输入单词后能否切出相应正确的Token序列。案例测试结果分析:Failure 测试失败测试失败Ignore 忽略测试忽略测试测试成功测试成功JUnit深入知识深入知识Q3.Fixture (fixture中文译为:固定装置) 问题:在执行一个或者多个测试方法时需要的一系列公共资源或者数据,例如测试环境,测试数据等等。在编写单元测试的过程中,你就会发现在大部分的测试方法在进行真正的测试之前都需要做大量的铺垫,测试效率低。 解决方案:JUnit 专门提供了设置

14、公共 Fixture 的方法,同一测试类中的所有测试方法都可以共用它来初始化 Fixture 和注销 Fixture。Q3.Fixture和编写 JUnit 测试方法一样,公共 Fixture 的设置也很简单,只需:1.使用注解 org.junit.Before 修饰用于初始化 Fixture 的方法。2.使用注解 org.junit.After 修饰用于注销 Fixture 的方法。3.保证这两种方法都使用 public void 修饰,而且不能带有任何参数。Q4.Fixture的优化使用 Fixture:方法级别:方法级别 方法级别方法级别Fixture的执行示意图:的执行示意图:Q4.F

15、ixture的优化使用 问题:若设置Fixture非常耗时时(如设置数据库连接),而且对于不会发生变化的测试环境或测试数据,每次执行测试方法都要重复设置Fixture,岂不是非常耗时? 解决方案:使用类别级的Fixture。Q4.Fixture的优化使用 Fixture:类别级:类别级 类级别类级别Fixture的执行示意图:的执行示意图:Q4.Fixture的优化使用类级别的 Fixture 设置方法,编写规范如下:1.使用注解 org.junit.BeforeClass 修饰用于初始化 Fixture 的方法。2.使用注解 org.junit.AfterClass 修饰用于注销 Fixtu

16、re 的方法。3.保证这两种方法都使用 public static void 修饰,而且不能带有任何参数。类级别的 Fixture 仅会在测试类中所有测试方法执行之前执行初始化,并在全部测试方法测试完毕之后执行注销方法.Q5.异常测试 问题:如何测试源文件中的涉及到的抛出异常这项功能(即Exception) 解决方案:JUnit中的异常测试Q5.异常测试 注解 org.junit.Test 中有个非常有用的参数:expected 。 参数 expected 代表测试方法期望抛出指定的异常,如果运行测试并没有抛出这个异常,则 JUnit 会认为这个测试没有通过。这为验证被测试方法在错误的情况下是

17、否会抛出预定的异常提供了便利。Q5.异常测试 例子:在源文件中,方法supportDBChecker 用于检验数据库版本是否支持,若不支持,则会抛出异常UnsupportDBVersionException 在测试用例中,我们为了测试能否正常抛出这个异常,编写异常测试方法代码如下:又一个新概念出现了测试运行器,JUnit 中所有的测试方法都是由它负责执行的。JUnit 为单元测试提供了默认的测试运行器,但 JUnit 并没有限制使用默认的运行器。相反,你不仅可以定制自己的运行器(所有的运行器都继承自 org.junit.runner.Runner),而且还可以为每一个测试类指定使用某个具体的运

18、行器。指定方法也很简单,使用注解 org.junit.runner.RunWith 在测试类上显式的声明要使用的运行器即可:Q6.测试运行器介绍Q7.参数化测试 问题:为了保证单元测试的严谨性,我们会模拟不同的测试数据来测试方法的处理能力,但这些测试方法都是大同小异,代码结构都是相同的,不同的仅仅是测试数据和期望值,造成的代码冗余怎么处理? 解决方案:JUnit4的参数化测试Q8.参数化测试 例子:有这样一个接口,对其执行单元测试,该接口实现的是加法计算: 被测试类JDemo代码参数化测试的编写要求:参数化测试的编写要求:1.为准备使用参数化测试的测试类指定特殊的运行器为准备使用参数化测试的测试类指定特殊的运行器 org.junit.runners.Parameterized。2.为测试

温馨提示

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

评论

0/150

提交评论