Junit.ppt_第1页
Junit.ppt_第2页
Junit.ppt_第3页
Junit.ppt_第4页
Junit.ppt_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

1、单元测试以及jUnit的使用,主讲教师:英明,Brief Agenda,软件测试,是为了发现错误而执行程序的过程 或者说,软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误的过程 是验证程序正确并符合用户需求的过程,软件质量 Software Quality,软件缺陷例子1,事件: 1996年6月4日,Arane5发射40秒后爆炸。 原因: 将一个64位浮点值转换为16位有符号整数值时,超出了16位整数的表示范围,而这个异常未得到正确解决。,软件缺陷例子2,事件 1999年 火星气象卫星(M

2、ars Climate Orbiter)到达火星之后不久就消失; 火星极地登陆者(Mars Polar Lander)在火星上着陆时坠毁。 原因 地面系统软件和飞行器上软件分别使用公制和英制两种单位。,软件缺陷的修复费用,软件在从需求、设计、编码、测试一直到交付用户公开使用后的过程中,都有可能产生和发现缺陷。随着整个开发过程的时间推移,更正缺陷或修复问题的费用呈几何级数增长。,The cost are logarithmic,$1,$10,$100,specification,design,code,release,$1000+,软件测试Pareto法则(8:2),什么是单元测试?,系统开发是

3、以模块为单位的,在将模块集成为目标系统之前,要先找出模块中的错误,这种测试叫做单元测试。 Unit Testing,什么是单元测试?,单元测试测试的软件最小的可执行单元的正确性,即类或方法 单元测试通常是一段可执行代码,并能验证执行结构是否和预期相等 单元测试是其他类型测试的基础。不认真,完整的单元测试会导致其他类型测试起不到好的效果,盖房子,至少要保证每一块砖都是好的,软件开发生命周期(Software Development Life Cycle),待测试的类: public class Calculator public Double add(double a, double b) re

4、turn (Double.valueOf(a - b); public static void main(String args) /如果输出2 程序正确 Calculator calc= new Calculate(); System.out.println(calc.add(1, 1); ,调试通过的程序就是正确的吗?,调试通过,但不符合用户需求,软件的缺陷:与产品说明书偏离 或者与用户的需求偏离,给我们造成麻烦的不是我们不知道的东西, 而是我们已知的东西原本不是这样 !,谁最适合做单元测试?,程序员,测试不是我的工作 你是这样的程序员么?,测试是测试部门的责任,我的责任应该关注在写代码上

5、 测试不是一种技术工作,毫无乐趣可言,请不要骚扰我。我可是一个了不起的程序员 我们有测试人员,有集成/系统/确认测试,他们迟早会发现我的错误。请不要浪费我的时间。 不要侮辱我,我写的程序,怎么可能有错误。测试是完全没必要的。,离我远一点,我是程序员,程序员的责任,程序员的价值在于和他人合作,开发出高质量的代码,而不是一堆新技术名词堆砌的虫件(bugware)。 程序员必须对自己的代码质量负责,单元测试是对自己代码质量的基本承诺。 程序=UT+CODE 不做单元测试,就会影响团队其他人员的工作。测试人员有权利对没有做过UT的代码说No.不愿意做UT的人,不属于任何团队。,程序=UT + CODE

6、,什么时候做单元测试?,测试驱动开发( Test-Driven Development ),Test-Driven Development是一种开发风格,它要求程序员做到: 在写产品代码之前,先写它的单元测试(Unit Tests) 没有单元测试的Class不允许作为产品代码 单元测试例子决定了如何写产品代码 不断地成功运行所有的单元测试例子 不断的完善单元测试例子,Test-Driven Development(TDD),TDD和PSP,Personal Software Process的Development,Design,Code,Build,Test,Test-Driven Desig

7、n and Development,Analysis,Code Unit Test,Code,Build,Run Test,Analysis,Design,JUnit是一个Java语言的单元测试框架,由Kent Beck和Erich Gamma开发。JUnit是开放源代码的。 最新的版本是:JUnit 4.11. 包括七个包:核心包是junit.framework和junit.runner。 可以从这里下载JUnit的源代码和文档: /,Junit简介,JUnit的测试框架类结构很简单,主要由3个类组成:,Junit测试框架,junit.framework

8、.Test:测试接口。 junit.framework.TestCase:测试用例类,根据情况编写若干个public void testXxx()方法,在方法中通过assertYyy()定制若干测试规则。 junit.framework.TestSuite:测试套件类,它可以将多个测试用例类捆绑在一起运行,也可以捆绑另一个测试套件。,Junit测试框架,相关定义,待测试的类: public class Calculator public Double add(double a, double b) return (Double.valueOf(a + b); public Double sub

9、tract(double a, double b) return(Double.valueOf(a - b); public static void main(String args) /如果输出2 程序正确 Calculator calc= new Calculate(); System.out.println(calc.add(1, 1); ,实例(Eclipse中使用JUnit),基本类型,对象,基本类型转换为Double的实例,测试固件,一个测试用例可以包含若干个testXxx()测试方法,测试用例测试一个或多个类API接口的正确性。 在调用类API时,需要事先创建这个类的对象及一些关

10、联的对象,这组对象就称为测试固件(Fixture),相当于测试用例的“工作对象”。,Junit 3.x 测试过程,TestCase实例被运行时,依照以下步骤运行: 创建测试用例的实例。 调用setUp()方法,执行一些初始化工作(环境配置)。 运行testXxx()测试方法。 调用tearDown()方法,执行销毁对象的工作。,public class CalculatorTest Calculator calc; protected void setUp() calc=new Calculator(); Test public void BasicAddition() assertEqual

11、s(Double.valueOf(2),calc.add(1.0,1.0); protected void tearDown() ,Junit 3.x,Junit 3.x测试过程,如果测试用例类中有多个testXxx()方法,且它们都需要使用到相同的一组对象,我们可以在setUp()中实例化这组对象,并在tearDown()中销毁它们。 创建TestCase类的子类。 在子类中声明若干个测试所用的对象。 覆盖setUp()方法,在方法中实例化这些对象。 覆盖tearDown()方法,释放这些对象的资源。,public class CalculatorTest Calculator calc;

12、protected void setUp() calc=new Calculator(); Test public void BasicAddition() assertEquals(Double.valueOf(2),calc.add(1.0,1.0); Test public void AdditionNegativeNumber() assertEquals(Double.valueOf(0),calc.add(1,-1); protected void tearDown() ,Junit 4.x 测试过程,setUp()方法可以用其他的名字,只要用Before 注释来指示即可,而且可以

13、有多个。 tearDown()方法可以用其他的名字,只要用After注释来指示即可。 Annotation:注释,public class CalculatorTest Calculator calc; Before protected void init() System.out.println(“初始化。”); Before protected void init2() calcu=new Calculator(); Test public void BasicAddition() assertEquals(Double.valueOf(2),calc.add(1.0,1.0); Test

14、 public void AdditionNegativeNumber() assertEquals(Double.valueOf(0),calc.add(1,-1); After protected void exit() ,测试用例,有了测试固件,就可以开始编写测试用例的测试方法了。当然你也可不需要测试固件而直接编写测试用例方法。 测试方法都必须是public void的, 使用Test 注释来指示。在一个方法中可以包括多个assertYyy()方法,每个assertYyy()方法都是一个测试规则。,assertEquals(expected, actual) assertEquals(m

15、essage, expected, actual) assertEquals(expected, actual, delta) assertEquals(message, expected, actual, delta) assertFalse(condition) assertFalse(message, condition) assertTrue(condition) assertTrue(message, condition) assert(Not)Null(object) assert(Not)Null(message, object) assert(Not)Same(expected

16、, actual) assert(Not)Same(message, expected, actual),assert 断言,Calculator calc= new Calculator(); assertEquals(expected, actual) assertEquals(Double.valueOf(2.0),calc.add(1.0,1.0); assertTrue(condition) assertTrue(calc.add(1.0, 1.0).equals(Double.valueOf(2.0); assertNotNull(object) assertNotNull(cal

17、c);,assert 断言,public class CalculatorTest Calculator calc; Before protected void init() System.out.println(“初始化。”); Before protected void init2() calcu=new Calculator(); Test public void BasicAddition() assertEquals(Double.valueOf(2),calc.add(1.0,1.0); Test public void AdditionNegativeNumber() asser

18、tEquals(Double.valueOf(0),calc.add(1.0,-1.0); After protected void exit() ,测试套件,通过TestSuite对象将多个测试用例组装成到一个测试套件,则测试套件批量运行。需要特殊指出的是,可以把一个测试套件整个添加到另一个测试套件中,就象小筐装进大筐里变成一个箧一样。 测试套件类也通过承继TestCase类实现,只不过它提供了一个public static Test suite()静态方法,在该方法中将多个测试用例捆绑组装在一起。,public class CalculatorTest 1 Calculator calc;

19、 Before protected void init() System.out.println(“初始化。”); Before protected void init2() calcu=new Calculator(); Test public void testBasicSubtraction() assertEquals(Double.valueOf(0),calc.subtract(1.0,1.0); Test public void testSubtractionNegativeNumber() assertEquals(Double.valueOf(2),calc.subtract(1.0,-1.0); After protected void exit() ,import junit.framework.JUnit4TestAdapter;import junit.framework.Test;import junit.framework.TestSuite; public class CalculatorTestSuite public static Test suite() TestSuite suite = new TestS

温馨提示

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

评论

0/150

提交评论