实验二+085

一、实验目的

掌握基于覆盖理论与基本路径的基本白盒测试方法和实践

二、实验要求

运用逻辑覆盖测试的覆盖准则设计被测程序的测试用例,并运行测试用例检查程序的正确与否,给出程序缺陷小结。

三、实验内容

被测代码

 1 import java.util.InputMismatchException;
 2 import java.util.Scanner;
 3 
 4 public class TestDemo {
 5     
 6     public static String Triangle(int side1,int side2,int side3)
 7     {
 8         int temp;
 9         if(side1>side2) //排个序让小数在前,大数在后
10             {temp=side1;side1=side2;side2=temp;}
11         if(side2>side3) 
12             {temp=side2;side2=side3;side3=temp;}
13         
14         String result="三角形";
15         if(side1+side2<=side3)
16             return "不构成"+result;
17         else if(side1==side2 && side2==side3)
18             return "等边"+result;
19         else if(side1==side2 || side2==side3 || side1==side3)
20             return "等腰"+result;
21         else if(side1*side1+side2*side2==side3*side3)
22             return "直角"+result;
23         else
24             return "普通"+result;
25     }
26     
27     public static boolean Check(int num) //检验输入的数据是否属于[1,100]
28     {
29         if(num<1 || num>100)
30         {
31             System.out.println("边的值不在范围内!");
32             return false;
33         }
34         return true;
35     }
36 
37     public static void main(String[] args) 
38     { 
39         while(true)
40         {
41             Scanner scanner=new Scanner(System.in);
42             int side1=0,side2=0,side3=0;
43             boolean flag=true;  //用于标记输入的数据是否合法
44             System.out.println("请输入三角形的三条边");
45             try{        //捕获输入异常
46                 side1=scanner.nextInt();
47                 side2=scanner.nextInt();
48                 side3=scanner.nextInt();
49             }
50             catch(InputMismatchException e)  //显示输入异常
51             {
52                 flag=false;
53                 System.out.println("请输入整数!");
54             }
55             if(flag)  //若输入有误则直接退出
56                 if(Check(side1) && Check(side2) && Check(side3))
57                     System.out.println(Triangle(side1,side2,side3));
58         }
59     }
60 }

 

 

 

Triangle()方法的控制流图如下

通过对控制流图的分析后知至少需要2x2x5=20组测试样例,因此设计的测试用例表如下

Junit 测试脚本、执行结果

  这里直接使用参数化测试方法

 1 import static org.junit.Assert.*;
 2 
 3 import java.util.Arrays;
 4 import java.util.Collection;
 5 import org.junit.Before;
 6 import org.junit.Test;
 7 import org.junit.runner.RunWith;
 8 import org.junit.runners.Parameterized;
 9 import org.junit.runners.Parameterized.Parameters;
10 
11 @RunWith(Parameterized.class)
12 
13 public class TestDemoTest {
14     private static TestDemo testcase=new TestDemo();
15     
16     private int side1,side2,side3;
17     private String result;
18     
19     @Before
20     public void setUp() throws Exception {
21     }
22     
23     //参数存储
24     @Parameters
25     public static Collection Data()
26     {
27         return Arrays.asList(new Object[][]{
28             {5,2,1,"不构成三角形"},
29             {3,3,3,"等边三角形"},
30             {5,3,5,"等腰三角形"},
31             {5,4,3,"直角三角形"},
32             {10,6,5,"普通三角形"},
33             {5,3,1,"不构成三角形"},
34             {3,1,5,"不构成三角形"},
35             {3,5,1,"不构成三角形"},
36             {1,3,5,"不构成三角形"},
37             {5,5,5,"等边三角形"},
38             {5,5,6,"等腰三角形"},
39             {4,5,5,"等腰三角形"},
40             {4,3,4,"等腰三角形"},
41             {4,4,3,"等腰三角形"},
42             {8,6,10,"直角三角形"},
43             {8,10,6,"直角三角形"},
44             {3,4,5,"直角三角形"},
45             {5,7,10,"普通三角形"},
46             {10,7,5,"普通三角形"},
47             {5,10,7,"普通三角形"},
48         });
49                 
50     }
51     
52     //构造函数
53     public TestDemoTest(int side1,int side2,int side3,String result) 
54     {
55         this.side1=side1;
56         this.side2=side2;
57         this.side3=side3;
58         this.result=result;
59     }
60     
61     @Test
62     public void testTriangle() {
63         assertEquals(result, testcase.Triangle(side1, side2, side3));
64     }
65 
66 }

测试结果

上面使用的是参数化测试,所以下面只给出打包测试脚本

 1 import static org.junit.Assert.*;
 2 
 3 import org.junit.Before;
 4 import org.junit.Test;
 5 import org.junit.runner.RunWith;
 6 import org.junit.runners.Suite;
 7 import org.junit.runners.Suite.SuiteClasses;
 8 
 9 @RunWith(Suite.class)
10 @Suite.SuiteClasses({
11     TestDemoTest.class
12 })
13 
14 public class pakageTest {
15 
16     @Before
17     public void setUp() throws Exception {
18     }
19 }

打包测试结果

 

四、测试小结:

  代码能够通过所有测试用例,未发现缺陷

  通过实验掌握了单元测试中常用的普通测试、参数化测试、打包测试等测试方法,尤其后面两个测试方法更加高效与便捷。

posted @ 2017-04-12 14:27  pter  阅读(254)  评论(0编辑  收藏  举报