1、1Junit 单元测试版本号:0.1制定日期:2010-12编制 冯宝鹏 日期 2012-04-14审核 日期批准 日期2文档修订记录修订日期 修订内容 修订人3目 录Junit 单元测试 4一 实验目的 .4二 实验环境 .4三 实验内容 .4四 实验步骤 .4五 测试用例 .4六 测试计划 .6七 测试计划 .6八 覆盖率测试报告 .91.测试一元二次方程有两个实根的情况 92.测试二元一次方程有两个虚根的情况 103. 测试一元一次方程有一个根的情况 114 测试不为方程的情况 12九 实验总结 .144Junit 单元测试一 实验目的1.掌握白盒测试方法,并按单元测试的要求设计测试用例
2、。2.能熟练应用 junit 测试工具进行单元测试。3.进行代码覆盖检查。二 实验环境主流 PC 机一套,windows 操作系统 eclipse 开发平台。三 实验内容1、用 java 语言编写一个求一元二次方程根的函数2、设计白盒测试用例,达到分支覆盖3、使用弱健壮等价类分析方法设计测试用例。4、根据以上设计的测试用例,编写 junit 测试代码,并进行测试。5、利用 EclEmma 完成测试代码覆盖分析,并生成 html 格式代码覆盖测试报告。四 实验步骤(1) 根据白盒法设计测试用例,并撰写单元测试计划书。(2) 根据每个测试用例,编写基本 Junit 的单元测试脚本。(3) 生成 h
3、tml 格式的代码覆盖测试报告。五 测试用例采用条件覆盖法设计用例,使判断中的每个条件的可能取值至少满足一次。分为四种情况:(1)一元二次方程有两个实根(简单起见,将方程有两个相同实根,归类为方程有两个实根)测试用例 ID Equation测试用例名称 方程有两个实根5测试目的 测试一元二次方程有两个实根情况的正确性前置条件 a!=0x2=(float) (-b-Math.sqrt(delt)/(2*a);results0=x1;results1=x2;print();return results;elsereal=-b/(2*a);imag=(float) (Math.sqrt(-delt)
4、/(2*a);results0=real;results1=imag;print();return results;public static void print()if(0.0f=a) if(0.0f!=b)System.out.println(“该方程是一元一次方程,其根为:x=“+results 0);elseSystem.err.println(“不是一个方程!“);elseif(delt=0)System.out.println(“该方程是一元二次方程,两根分别为: x1=“+results0+“,x2=“+results1); elseSystem.out.println(“该一
5、元二次方程的根为复数 ,两根分别为:x1=“+results0+“+“+results1+“i“+“,x2=“+results0+“-“+results1+“i“);2. 自定义异常类8package cn.edu.xaut.exception;public class MyArithmeticException extends Exception public MyArithmeticException() public MyArithmeticException(String message) super(message);public MyArithmeticException(Thro
6、wable cause) super(cause);public MyArithmeticException(String message, Throwable cause) super(message, cause);3. Junit 单元测试类package test;import org.junit.Assert;import org.junit.Test;import cn.edu.xaut.junit.Equation;public class EquationTest Testpublic void testCalc() float a = 1.0f;float b = 2.0f;
7、float c = 1.0f;float expecteds = -1.0f,-1.0f ;/float expecteds = -0.5f,0.5f;/float expecteds =-0.5f;float results;try results = Equation.calc(a, b, c);Assert.assertArrayEquals(expecteds, results, 0.0f);/Assert.assertEquals(expecteds,results0,0.0f); catch (Exception e) e.printStackTrace();9八 覆盖率测试报告1
8、.测试一元二次方程有两个实根的情况EMMA Coverage Report (generated Mon Apr 09 20:03:36 CST 2012)all classesOVERALL COVERAGE SUMMARYname class, % method, % block, % line, %all classes 67% (2/3) 44% (4/9) 50% (124/249) 46% (23/50)OVERALL STATS SUMMARYtotal packages: 3total executable files: 3total classes: 3total metho
9、ds: 9total executable lines: 50COVERAGE BREAKDOWN BY PACKAGEname class, % method, % block, % line, %cn.edu.xaut.exception 0% (0/1) 0% (0/4) 0% (0/16) 0% (0/8)cn.edu.xaut.junit 100% (1/1) 67% (2/3) 47% (93/199) 47% (15/32)test 100% (1/1) 100% (2/2) 91% (31/34) 80% (8/10)all classesEMMA 2.0.5312 EclEm
10、ma Fix 2 (C) Vladimir Roubtsov覆盖代码:Equation.javaresults=new float2;a=w; b=p; c=q;if(0.0f=a) /bx+c=0; x=-c/b;elsedelt=b*b-4*a*c;if(delt=0)10x1=(float) (-b+Math.sqrt(delt)/(2*a);x2=(float) (-b-Math.sqrt(delt)/(2*a);results0=x1;results1=x2;print();return results;elseif(delt=0)System.out.println(“该方程是一元
11、二次方程,两根分别为: x1=“+results0+“,x2=“+results1); 2.测试二元一次方程有两个虚根的情况EMMA Coverage Report (generated Mon Apr 09 20:03:36 CST 2012)all classesOVERALL COVERAGE SUMMARYname class, % method, % block, % line, %all classes 67% (2/3) 44% (4/9) 52% (129/249) 46% (23/50)OVERALL STATS SUMMARYtotal packages: 3total e
12、xecutable files: 3total classes: 3total methods: 9total executable lines: 50COVERAGE BREAKDOWN BY PACKAGEname class, % method, % block, % line, %cn.edu.xaut.exception 0% (0/1) 0% (0/4) 0% (0/16) 0% (0/8)cn.edu.xaut.junit 100% (1/1) 67% (2/3) 49% (98/199) 47% (15/32)test 100% (1/1) 100% (2/2) 91% (31
13、/34) 80% (8/10)all classes11EMMA 2.0.5312 EclEmma Fix 2 (C) Vladimir Roubtsov代码覆盖情况:results=new float2;a=w; b=p; c=q;if(0.0f=a) /bx+c=0; x=-c/b;delt=b*b-4*a*c;if(delt=0)real=-b/(2*a);imag=(float) (Math.sqrt(-delt)/(2*a);results0=real;results1=imag;print();return results;if(0.0f=a)if(delt=0)System.ou
14、t.println(“该一元二次方程的根为复数 ,两根分别为:x1=“+results0+“+“+results1+“i“+“,x2=“+results0+“-“+results1+“i“);3. 测试一元一次方程有一个根的情况EMMA Coverage Report (generated Mon Apr 09 20:03:36 CST 2012)all classesOVERALL COVERAGE SUMMARYname class, % method, % block, % line, %all classes 67% (2/3) 44% (4/9) 31% (76/244) 40% (
15、20/50)OVERALL STATS SUMMARYtotal packages: 3total executable files: 312total classes: 3total methods: 9total executable lines: 50COVERAGE BREAKDOWN BY PACKAGEname class, % method, % block, % line, %cn.edu.xaut.exception 0% (0/1) 0% (0/4) 0% (0/16) 0% (0/8)cn.edu.xaut.junit 100% (1/1) 67% (2/3) 25% (
16、50/199) 38% (12/32)test 100% (1/1) 100% (2/2) 90% (26/29) 80% (8/10)all classesEMMA 2.0.5312 EclEmma Fix 2 (C) Vladimir Roubtsov代码覆盖情况:results=new float2;a=w; b=p; c=q;if(0.0f=a) /bx+c=0; x=-c/b;if(0.0f!=b)x=-c/b; results0=x;print();return results;if(0.0f=a) if(0.0f!=b)System.out.println(“该方程是一元一次方程
17、,其根为:x=“+results 0);4 测试不为方程的情况抛出自定义异常:EMMA Coverage Report (generated Mon Apr 09 20:03:36 CST 2012)13all classesOVERALL COVERAGE SUMMARYname class, % method, % block, % line, %all classes 100% (3/3) 44% (4/9) 14% (33/234) 23% (11/48)OVERALL STATS SUMMARYtotal packages: 3total executable files: 3tot
18、al classes: 3total methods: 9total executable lines: 48COVERAGE BREAKDOWN BY PACKAGEname class, % method, % block, % line, %cn.edu.xaut.junit 100% (1/1) 33% (1/3) 11% (22/199) 16% (5/32)cn.edu.xaut.exception 100% (1/1) 25% (1/4) 25% (4/16) 25% (2/8)test 100% (1/1) 100% (2/2) 37% (7/19) 50% (4/8)all
19、classesEMMA 2.0.5312 EclEmma Fix 2 (C) Vladimir Roubtsov代码覆盖情况:Equation.javaresults=new float2;a=w; b=p; c=q;if(0.0f=a) /bx+c=0; x=-c/b;if(0.0f!=b)throw new MyArithmeticException(“除数不能为 0“);MyArithmeticException.javapublic MyArithmeticException(String message) super(message);EquationTest.javapublic class EquationTest catch (Exception e) e.printStackTrace();14九 实验总结通过本次实验,对 Junit 单元测试框架有了一定的理解。同时,熟悉了开源框架的使用,通过查找 API函数,比如 Assert.assertArrayEquals、Assert.assertEquals 可以进行断言测试等等。总之,通过本次实验,使我对软件测试有了一个初步的认识,开启了今后学习软件测试之门。