您好,欢迎访问三七文档
当前位置:首页 > 中学教育 > 初中教育 > JUnit单元测试课件
利用Junit进行单元测试1、什么是单元测试?....................................................................................................................22、单元测试重要特征?................................................................................................................23、伴随单元测试相关活动?........................................................................................................24、为什么要进行单元测试?........................................................................................................25、测试是如何驱动开发过程的?................................................................................................46、Junit特征...................................................................................................................................57、测试覆盖种类............................................................................................................................78、单元测试开始............................................................................................................................89、度量代码质量..........................................................................................................................2010、建立测试文化........................................................................................................................2111、功能测试................................................................................................................................2112、附件:....................................................................................................................................221、什么是单元测试?单元,通俗的说就是指一个实现简单功能的函数(方法)。单元测试是在OOP(面向对象编程)过程中要进行的最小级别的测试活动,在单元测试活动中,软件的独立单元将在与程序的其它部分相隔离(不依赖)的情况下进行的测试,所谓最小级别,我们通常是指对象的单个方法。单元测试,某个特定方法成功执行一系列特定的任务,就是用一组特定的输入(测试用例),方法将输出预期(正确)的结果。2、单元测试重要特征?单元测试不仅仅是作为无错编码一种辅助手段在一次性的开发过程中使用,单元测试必须具有:可重复性、可持续性、可维护性、可重构性;可重复性:移植到新的运行环境的过程中,能够成功并正确运行;可持续性:所有测试都必须在整个软件的生命周期中进行维护。可重构性:使得程序代码具有很好的可重构性;可维护性:无论软件怎么修改,能够成功并正确运行;3、伴随单元测试相关活动?经常与单元测试联系起来的一些开发活动包括代码评审(Codereview):静态分析(Staticanalysis)和动态分析(Dynamicanalysis);静态分析就是对软件的源代码进行审核,查找错误或收集一些度量数据,并不需要对代码进行编译和执行。动态分析就是通过观察软件运行时的动作,来提供执行跟踪,时间分析,以及测试覆盖率方面的信息。为了更好利用Eclipse在开发时就能够提升代码的质量,公司开发了代码检查及发现bug的插件,具体参考附件:代码检查工具的相关文档为了能够把握单元测试方向及进度,架构师需要每天检查单元测试的生成报表。4、为什么要进行单元测试?测试不能够证明错误不存在,只能够证明错误存在。尽可能测试一切可以测试的东西。无良好编程习惯的老程序员及新程序员会这样认为:╳很烦,很枯燥(老程序员:听到这个消息就开始恼火,很排斥)时间很紧张,没有时间完成单元测试不知道怎么入手(新程序员)没有什么意义(老程序员:我已经很厉害了,业务也非常熟,没有必要)浪费资源(开始觉得)整理测试思路准备复杂的测试用例根据测试用例编写测试代码。。。具有经验及良好编程习惯的老程序员会这样认为:√减少出错概率提高代码质量(健壮性)可持续性/可回归性(为后续接手人员提供案例及榜样)增强责任心提高自信心提高业务掌握能力(业务被完全掌握)提高生产力(个人及团队)。。。在时间很紧张的情况下,为什么还要进行烦人的单元测试(写的繁杂的测试代码,构造复杂的测试用例,浪费公司人力物力。。。)?这个问题在整个软件行业的一般开发人员会提出这个问题,为什么?因为他们还没有体会到单元测试给整个软件带来的很多优点,当软件在开发过程中就能够发现的Bug,而且很容易的修改掉,为什么还要等到集成测试时让测试人员帮你发现呢?集成测试人员压力有多大,测试时间有多少保障,测试粒度有多细,时间紧迫时测试交付时软件运行的可信赖度?软件交付后需要进行运维,在运维过程中在发现很多的Bug(其它行业同样),这个时候的维护成本将会大大增加,后果严重的话可以击毁整个企业的生存空间,这样的话我们自己的发展空间还有吗?所以在以上对比及各种元素影响之后,越是时间紧迫的情况下,越是要把单元测试做到位,尽量多给集成测试及可能存在重构的时间。5、测试是如何驱动开发过程的?测试驱动开发起源于XP法中提倡的测试优先实践。测试优先实践重视单元测试,强调程序员除了编写代码,还应该编写单元测试代码。在开发的顺序上,它改变了以往先编写代码,再编写测试的过程,而采用先编写测试,再编写代码来满足测试的方法。这种方法在实际中能够起到非常好的效果,使得测试工作不仅仅是单纯的测试,而成为设计的一部分。在编写程序之前,每个人都会先进行设计的工作。可能有些人的设计比较正式,绘制模型,编写文档。有些人的设计只是存在于脑海之中。且不论是设计是精细还是粗糙,你都为随后的编码活动制定了一个标准。这个标准的明确程度和你的设计的细致程度有关。但应该承认,这个标准是不够细化的。因为你的设计不可能精细到代码级的程度。而标准不够明确的则会产生一些问题,例如,在编写代码的过程中,你还可能会发现原先的设计出现问题,从而中途改变代码的编写思路。这将会导致成果难以检验,进度难以度量。既然以设计为导向的标准不够明确,不够具体。那什么样的标准才是合适的呢?只能是代码。因为代码是最明确、最具体的,最能体现出结果。所以测试优先的本质其实是目标管理。编写测试代码其实是在制定一个小目标,这个小目标非常的明确,它规定了你需要设计的类、方法。以及方法需要满足的结果。这些目标制定完成之后,你才开始编写代码来达成该目标。测试的目标要比设计的目标粒度更小,但是成本上却更为经济。细粒度的设计需要花费大量的成本,虽然有些CASE工具都提供了代码自动生成的功能,但结果往往难以令人满意。所以,设计如果要做到和测试相同的粒度,需要很大成本,如果粒度不够细,指导的意义又不够。减轻了测试的工作量,无论是否进行设计工作,集成测试工作都是不可避免的,先进行单元测试,可以减少后续的集成测试工作量。采用测试优先的过程中,设计的粒度较大。因为测试可以实现一部分的设计工作。这样,设计上可以节省一些工作量。例如,不再需要将类图细化到每个方法。在编写测试代码上花费的成本,会在回归测试上得到回报。6、Junit特征ErichGamma和KentBack两个牛人2000年完成了Junit第一个版本,也是献给21世纪Java程序员最好的礼物。Junit就是对程序代码进行单元测试的一种Java框架。实际上是一个Java类包可以用来编写自动化测试工具,这样就可以运行程序可持续性测试,减少测试的难度以及减少编写程序的错误。有了这个工具,在了解程序的外部特性的情况下,就可以在编写程序之前就可以进行编写测试工具,与开发同时进行。受制于老的Web服务器,目前很多开发者使用的版本为3.8.1(20020904),也是版本4(20060216)出来之前最稳定的一个版本;目前最新版本为:Junit4.7(20090804),随着Junit4出来之后,最稳定的一个版本为Junit4.4(20070917)。6.1、Junit3.8.1版本特性:1、package:junit.framework.*;2、测试类需要继承TestCase;3、每个测试运行方法都必须以test开头;4、每个测试方法运行都依赖于TestRunner;5、每个测试类都需要复写setUp,tearDown来完成初始化数据及测试完成数据清理;6、断言方式方法很多,粒度很细;。。。6.2、Junit4新特性(4.4):需JDK1.5以上支持1、@Test@Test注解,新版本的特性已经不需要再继承TestCase,测试的方法也不需要以test开头,test+XXX,只需要在测试方法上面加上@Test注解,Junit就认为属于该测试的范畴。@Testpublicvoidaddition(){assertEquals(12,simpleMath.add(7,5));}2、@Before,@After等同于旧版本(3.8.1)的“setup”,“tearDown”在注解的情况下,测试方法名称可以任意制定;@BeforepublicvoidrunBeforeEveryTest(){simpleMath=newSimpleMath();}@AfterpublicvoidrunAfterEveryTest(){simpleMath=null;}3、@BeforeClassand@AfterClass(全局性的初始化)@BeforeClasspublicstaticvoidrunBeforeClass(){//runforonetimebeforealltestcases}@AfterClasspublicstaticvoidrunAfterClass(){//runforonetimeafteralltestcases}4、ExceptionHandling(可以指定异常处理)@Test(expected=ArithmeticException.class)publicvoiddivisionWithException(){//dividebyzerosimpleMath.divide(1,0);}5、@
本文标题:JUnit单元测试课件
链接地址:https://www.777doc.com/doc-6109459 .html