掌握基于覆盖理论与基本路径的基本白盒测试方法和实践
运用逻辑覆盖测试的覆盖准则设计被测程序的测试用例,并运行测试用例检查程序的正确与否,给出程序缺陷小结。
根据各位同学自己的被测程序,分别作出各类白盒测试技术的用例设计和相应的Junit脚本。
所有的覆盖的技术:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖,基本路径测试方法。
包括的内容有:
1) 被测原代码
 
1 import java.util.Scanner; 2 public class NextDay { 3 static String nextdate(int year, int month, int day) { 4 // 闰年 5 if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { 6 if (month == 1 || month == 3 || month == 5 || month == 7 7 || month == 8 || month == 10) { 8 9 if (day == 31) { 10 day = 1; 11 month++; 12 } else 13 day++; 14 15 } else if (month == 2) { 16 if (day == 29) { 17 day = 1; 18 month++; 19 } else 20 day++; 21 22 } else if (month == 12) { 23 if (day == 31) { 24 day = 1; 25 month = 1; 26 year++; 27 } else 28 day++; 29 } else if (month == 4 || month == 6 || month == 9 || month == 11) { 30 if (day == 30) { 31 day = 1; 32 month++; 33 } else 34 day++; 35 } 36 } else// 平年 37 { 38 if (month == 1 || month == 3 || month == 5 || month == 7 39 || month == 8 || month == 10) { 40 41 if (day == 31) { 42 day = 1; 43 month++; 44 } else 45 day++; 46 47 } else if (month == 2) { 48 if (day == 28) { 49 day = 1; 50 month++; 51 } else 52 day++; 53 54 } else if (month == 12) { 55 if (day == 31) { 56 day = 1; 57 month = 1; 58 year++; 59 } else 60 day++; 61 } else if (month == 4 || month == 6 || month == 9 || month == 11) { 62 if (day == 30) { 63 day = 1; 64 month++; 65 } else 66 day++; 67 } 68 } 69 String Year = year + ""; 70 String Month = month + ""; 71 String Day = day + ""; 72 73 return Year + "年" + Month + "月" + Day + "日"; 74 75 } 76 77 public static void main(String[] args) { 78 79 String tmp = "0"; 80 int month = 0, year = 0, day = 0; 81 String date = " "; 82 while (true) { 83 Scanner sc = new Scanner(System.in); 84 85 System.out.println("请输入日期(以1个空格区分年月日)"); 86 try { 87 String str = sc.nextLine(); 88 String[] st = str.split(" "); 89 year = Integer.parseInt(st[0]); 90 month = Integer.parseInt(st[1]); 91 day = Integer.parseInt(st[2]); 92 } catch (Exception e) { 93 System.out.print("输入有误重新输入"); 94 continue; 95 } 96 97 if (year < 1912 || year > 2050) { 98 System.out.println("年份超过范围"); 99 continue; 100 } else if (month > 12 || month < 1) { 101 System.out.println("月份超过范围"); 102 continue; 103 } 104 // 日期有效判断 105 else if (month == 1 || month == 3 || month == 5 || month == 7 106 || month == 8 || month == 10) { 107 if (day > 31 || day < 1) { 108 System.out.println("日期超过范围"); 109 continue; 110 } 111 112 } else if (month == 4 || month == 6 || month == 9 || month == 11) { 113 if (day > 30 || day < 1) { 114 System.out.println("日期超过范围"); 115 continue; 116 } 117 } else if (month == 2) { 118 if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { 119 if (day < 1 || day > 29) { 120 System.out.println("日期超过范围"); 121 continue; 122 } 123 } else { 124 if (day < 1 || day > 28) { 125 System.out.println("日期超过范围"); 126 continue; 127 } 128 } 129 } 130 date = nextdate(year, month, day); 131 System.out.println("下一天是 "); 132 System.out.print(date); 133 System.out.println("\n是否停止 1 Or -1 -1为停止"); 134 tmp = sc.nextLine(); 135 136 } 137 138 } 139 140 }
2)依据覆盖技术,测试用例列表:
                   
                               
程序图 DD路径图
DD-路径(只压缩链路经)
| 程序图节点 | DD-路径 | 
| 5 | A | 
| 7 | B | 
| 8,9 | C | 
| 11 | D | 
| 12,13 | E | 
| 14,15 | F | 
| 17 | G | 
| 18 | H | 
| 19,20 | I | 
| 21,22 | J | 
| 24 | K | 
| 25 | L | 
| 26,27,28 | M | 
| 29,30 | N | 
| 31,32 | O | 
| 33,34 | P | 
| 35,36 | Q | 
| 38 | c | 
| 40,41 | d | 
| 43,44 | e | 
| 46,47 | f | 
| 49 | g | 
| 50 | h | 
| 51,52 | i | 
| 53,54 | j | 
| 56 | k | 
| 57 | l | 
| 58,59,60 | m | 
| 61,62 | n | 
| 63,64 | o | 
| 65,66 | p | 
| 67,68 | q | 
| 75 | Z | 
(I)语句覆盖(画出路径图后发现语句覆盖、判定覆盖与路径覆盖的测试路径是一样,为了避免重复,这里选取的判定覆盖、路径覆盖的用例是相同的):
A-B-C-D-E-Z
A-B-C-D-F-Z
A-B-C-G-H-I-Z
A-B-C-G-H-J-Z
A-B-C-G-K-L-M-Z
A-B-C-G-K-L-N-Z
A-B-C-G-K-O-P-Z
A-B-C-G-K-O-Q-Z
A-B-c-d-e-Z
A-B-c-d-f-Z
A-B-c-g-h-i-Z
A-B-c-g-h-j-Z
A-B-c-g-k-l-m-Z
A-B-c-g-k-l-n-Z
A-B-c-g-k-o-p-Z
A-B-c-g-k-o-p-Z
测试用例:
| 用例ID | 输入值 | 执行路径 | 预期输出 | ||
| year | month | day | X | ||
| 1 | 2000 | 1 | 31 | A-B-C-D-E-Z | 2000年2月1日 | 
| 2 | 2000 | 3 | 29 | A-B-C-D-F-Z | 2000年3月30日 | 
| 3 | 2004 | 2 | 29 | A-B-C-G-H-I-Z | 2004年3月1日 | 
| 4 | 2004 | 2 | 18 | A-B-C-G-H-J-Z | 2004年2月19日 | 
| 5 | 2008 | 12 | 31 | A-B-C-G-K-L-M-Z | 2009年1月1日 | 
| 6 | 2008 | 12 | 19 | A-B-C-G-K-L-N-Z | 2008年12月20日 | 
| 7 | 2012 | 4 | 30 | A-B-C-G-K-O-P-Z | 2012年5月1日 | 
| 8 | 2012 | 4 | 18 | A-B-C-G-K-O-Q-Z | 2012年4月19日 | 
| 9 | 2001 | 1 | 31 | A-B-c-d-e-Z | 2001年2月1日 | 
| 10 | 2001 | 3 | 20 | A-B-c-d-f-Z | 2001年3月1日 | 
| 11 | 2002 | 2 | 28 | A-B-c-g-h-i-Z | 2002年3月1日 | 
| 12 | 2002 | 2 | 18 | A-B-c-g-h-j-Z | 2002年2月18日 | 
| 13 | 2003 | 12 | 31 | A-B-c-g-k-l-m-Z | 2004年1月1日 | 
| 14 | 2003 | 12 | 1 | A-B-c-g-k-l-n-Z | 2003年12月2日 | 
| 15 | 2005 | 4 | 30 | A-B-c-g-k-o-p-Z | 2005年5月1日 | 
| 16 | 2005 | 4 | 28 | A-B-c-g-k-o-p-Z | 2005年4月29日 | 
(II)分支覆盖(判断覆盖):
A-B-C-D-E-Z
A-B-C-D-F-Z
A-B-C-G-H-I-Z
A-B-C-G-H-J-Z
A-B-C-G-K-L-M-Z
A-B-C-G-K-L-N-Z
A-B-C-G-K-O-P-Z
A-B-C-G-K-O-Q-Z
A-B-c-d-e-Z
A-B-c-d-f-Z
A-B-c-g-h-i-Z
A-B-c-g-h-j-Z
A-B-c-g-k-l-m-Z
A-B-c-g-k-l-n-Z
A-B-c-g-k-o-p-Z
A-B-c-g-k-o-p-Z
测试用例:
| 用例ID | 输入值 | 执行路径 | 预期输出 | ||
| year | month | day | X | ||
| 1 | 2000 | 1 | 31 | A-B-C-D-E-Z | 2000年2月1日 | 
| 2 | 2000 | 3 | 29 | A-B-C-D-F-Z | 2000年3月30日 | 
| 3 | 2004 | 2 | 29 | A-B-C-G-H-I-Z | 2004年3月1日 | 
| 4 | 2004 | 2 | 18 | A-B-C-G-H-J-Z | 2004年2月19日 | 
| 5 | 2008 | 12 | 31 | A-B-C-G-K-L-M-Z | 2009年1月1日 | 
| 6 | 2008 | 12 | 19 | A-B-C-G-K-L-N-Z | 2008年12月20日 | 
| 7 | 2012 | 4 | 30 | A-B-C-G-K-O-P-Z | 2012年5月1日 | 
| 8 | 2012 | 4 | 18 | A-B-C-G-K-O-Q-Z | 2012年4月19日 | 
| 9 | 2001 | 1 | 31 | A-B-c-d-e-Z | 2001年2月1日 | 
| 10 | 2001 | 3 | 20 | A-B-c-d-f-Z | 2001年3月1日 | 
| 11 | 2002 | 2 | 28 | A-B-c-g-h-i-Z | 2002年3月1日 | 
| 12 | 2002 | 2 | 18 | A-B-c-g-h-j-Z | 2002年2月18日 | 
| 13 | 2003 | 12 | 31 | A-B-c-g-k-l-m-Z | 2004年1月1日 | 
| 14 | 2003 | 12 | 1 | A-B-c-g-k-l-n-Z | 2003年12月2日 | 
| 15 | 2005 | 4 | 30 | A-B-c-g-k-o-p-Z | 2005年5月1日 | 
| 16 | 2005 | 4 | 28 | A-B-c-g-k-o-p-Z | 2005年4月29日 | 
(III)路径覆盖:
A-B-C-D-E-Z
A-B-C-D-F-Z
A-B-C-G-H-I-Z
A-B-C-G-H-J-Z
A-B-C-G-K-L-M-Z
A-B-C-G-K-L-N-Z
A-B-C-G-K-O-P-Z
A-B-C-G-K-O-Q-Z
A-B-c-d-e-Z
A-B-c-d-f-Z
A-B-c-g-h-i-Z
A-B-c-g-h-j-Z
A-B-c-g-k-l-m-Z
A-B-c-g-k-l-n-Z
A-B-c-g-k-o-p-Z
A-B-c-g-k-o-p-Z
测试用例:
| 用例ID | 输入值 | 执行路径 | 预期输出 | ||
| year | month | day | X | ||
| 1 | 2000 | 1 | 31 | A-B-C-D-E-Z | 2000年2月1日 | 
| 2 | 2000 | 3 | 29 | A-B-C-D-F-Z | 2000年3月30日 | 
| 3 | 2004 | 2 | 29 | A-B-C-G-H-I-Z | 2004年3月1日 | 
| 4 | 2004 | 2 | 18 | A-B-C-G-H-J-Z | 2004年2月19日 | 
| 5 | 2008 | 12 | 31 | A-B-C-G-K-L-M-Z | 2009年1月1日 | 
| 6 | 2008 | 12 | 19 | A-B-C-G-K-L-N-Z | 2008年12月20日 | 
| 7 | 2012 | 4 | 30 | A-B-C-G-K-O-P-Z | 2012年5月1日 | 
| 8 | 2012 | 4 | 18 | A-B-C-G-K-O-Q-Z | 2012年4月19日 | 
| 9 | 2001 | 1 | 31 | A-B-c-d-e-Z | 2001年2月1日 | 
| 10 | 2001 | 3 | 20 | A-B-c-d-f-Z | 2001年3月1日 | 
| 11 | 2002 | 2 | 28 | A-B-c-g-h-i-Z | 2002年3月1日 | 
| 12 | 2002 | 2 | 18 | A-B-c-g-h-j-Z | 2002年2月18日 | 
| 13 | 2003 | 12 | 31 | A-B-c-g-k-l-m-Z | 2004年1月1日 | 
| 14 | 2003 | 12 | 1 | A-B-c-g-k-l-n-Z | 2003年12月2日 | 
| 15 | 2005 | 4 | 30 | A-B-c-g-k-o-p-Z | 2005年5月1日 | 
| 16 | 2005 | 4 | 28 | A-B-c-g-k-o-p-Z | 2005年4月29日 | 
(IV)条件覆盖:各个条件取真或假的可能至少执行一次
A-B-C-D-E-Z A-B-c-d-e-Z
A-B-C-D-F-Z A-B-c-d-f-Z
A-B-C-D-E-Z A-B-c-d-e-Z
A-B-C-D-F-Z A-B-c-d-f-Z
A-B-C-D-E-Z A-B-c-d-e-Z
A-B-C-D-F-Z A-B-c-d-f-Z
A-B-C-G-H-I-Z A-B-c-g-h-i-Z
A-B-C-G-H-J-Z A-B-c-g-h-j-Z
A-B-C-G-K-L-M-Z A-B-c-g-k-l-m-Z
A-B-C-G-K-L-N-Z A-B-c-g-k-l-n-Z
A-B-C-G-K-O-P-Z A-B-c-g-k-o-p-Z
A-B-C-G-K-O-Q-Z A-B-c-g-k-o-q-Z
| 编号 | y%4==0 | y%100!==0 | y%400==0 | y%4==0&& y%100!==0 ||y%400==0 | 覆盖路径 | 
| 1 | T | T | T | T | B-C | 
| 2 | T | T | F | T | B-C | 
| 3 | F | F | F | F | B-c | 
| 编号 | m==1 | m==3 | m==5 | m==7 | m==8 | m==10 | 覆盖路径 | 
| 4 | T | F | F | F | F | F | C-D | 
| 5 | F | T | F | F | F | F | C-D | 
| 6 | F | F | T | F | F | F | C-D | 
| 7 | F | F | F | T | F | F | C-D | 
| 8 | F | F | F | F | T | F | C-D | 
| 9 | F | F | F | F | F | T | C-D | 
| 10 | F | F | F | F | F | F | C-G | 
| 编号 | d==31 | 覆盖路径 | 
| 11 | T | D-E | 
| 12 | F | D-F | 
| 编号 | m==2 | 覆盖路径 | 
| 13 | T | G-H | 
| 14 | F | G-K | 
| 编号 | d==29 | 覆盖路径 | 
| 15 | T | H-I | 
| 16 | F | D-F | 
| 编号 | m==12 | 覆盖路径 | 
| 17 | T | K-L | 
| 18 | F | K-O | 
| 编号 | d==31 | 覆盖路径 | 
| 19 | T | L-M | 
| 20 | F | L-N | 
| 编号 | d==31 | 覆盖路径 | 
| 21 | T | D-E | 
| 22 | F | D-F | 
| 编号 | m==1 | m==3 | m==5 | m==7 | m==8 | m==10 | 覆盖路径 | 
| 23 | T | F | F | F | F | F | c-d | 
| 24 | F | T | F | F | F | F | c-d | 
| 25 | F | F | T | F | F | F | c-d | 
| 26 | F | F | F | T | F | F | c-d | 
| 27 | F | F | F | F | T | F | c-d | 
| 28 | F | F | F | F | F | T | c-d | 
| 29 | F | F | F | F | F | F | c-g | 
| 编号 | d==31 | 覆盖路径 | 
| 30 | T | d-e | 
| 31 | F | d-f | 
| 编号 | m==2 | 覆盖路径 | 
| 32 | T | g-h | 
| 33 | F | g-k | 
| 编号 | d==29 | 覆盖路径 | 
| 34 | T | h-i | 
| 35 | F | d-f | 
| 编号 | m==12 | 覆盖路径 | 
| 36 | T | k-l | 
| 37 | F | k-o | 
| 编号 | d==31 | 覆盖路径 | 
| 38 | T | l-m | 
| 39 | F | l-n | 
| 编号 | d==31 | 覆盖路径 | 
| 40 | T | d-e | 
| 41 | F | d-f | 
测试用例:
| 用例ID | 输入值 | 执行路径 | 覆盖条件 | 预期输出 | ||
| A | B | X | X | |||
| 1 | 2000 | 1 | 31 | A-B-C-D-E-Z | 1,4,11 | 2000年2月1日 | 
| 2 | 2004 | 3 | 3 | A-B-C-D-F-Z | 2,5,12 | 2004年3月4日 | 
| 3 | 2008 | 5 | 31 | A-B-C-D-E-Z | 2,6,11 | 2008年6月1日 | 
| 4 | 2000 | 7 | 4 | A-B-C-D-F-Z | 1,7,12 | 2000年7月5日 | 
| 5 | 2004 | 8 | 31 | A-B-C-D-E-Z | 2,8,11 | 2004年9月1日 | 
| 6 | 2008 | 10 | 5 | A-B-C-D-F-Z | 2,9,12 | 2008年10月6日 | 
| 7 | 2000 | 2 | 29 | A-B-C-G-H-I-Z | 1,10,13,15 | 2000年2月1日 | 
| 8 | 2000 | 2 | 20 | A-B-C-G-H-J-Z | 1,10,13,16 | 2000年2月21日 | 
| 9 | 2004 | 12 | 31 | A-B-C-G-K-L-M-Z | 2,10,14,17,19 | 2005年1月1日 | 
| 10 | 2008 | 12 | 5 | A-B-C-G-K-L-N-Z | 2,10,14,17,20 | 2008年12月6日 | 
| 11 | 2000 | 4 | 30 | A-B-C-G-K-O-P-Z | 1,10,14,18,21 | 2000年5月1日 | 
| 12 | 2004 | 6 | 7 | A-B-C-G-K-O-Q-Z | 2,10,14,18,22 | 2004年6月8日 | 
| 13 | 2001 | 1 | 31 | A-B-c-d-e-Z | 3,23,30 | 2001年2月1日 | 
| 14 | 2002 | 3 | 3 | A-B-c-d-f-Z | 3,24,31 | 2002年3月4日 | 
| 15 | 2003 | 5 | 31 | A-B-c-d-e-Z | 3,25,30 | 2003年6月1日 | 
| 16 | 2005 | 7 | 5 | A-B-c-d-f-Z | 3,26,31 | 2005年7月6日 | 
| 17 | 2006 | 8 | 31 | A-B-c-d-e-Z | 3,27,30 | 2006年9月1日 | 
| 18 | 2007 | 10 | 5 | A-B-c-d-f-Z | 3,28,31 | 2007年10月6日 | 
| 19 | 2009 | 2 | 28 | A-B-c-g-h-i-Z | 3,29,32,34 | 2009年3月1日 | 
| 20 | 2013 | 2 | 20 | A-B-c-g-h-j-Z | 3,29,32,35 | 2013年2月21日 | 
| 21 | 2015 | 12 | 31 | A-B-c-g-k-l-m-Z | 3,29,33,36,38 | 2016年1月1日 | 
| 22 | 2017 | 12 | 5 | A-B-c-g-k-l-n-Z | 3,29,33,36,39 | 2017年12月6日 | 
| 23 | 2014 | 4 | 30 | A-B-c-g-k-o-p-Z | 3,29,33,37,41 | 2014年5月1日 | 
| 24 | 2018 | 6 | 7 | A-B-c-g-k-o-q-Z | 3,29,33,37,41 | 2018年6月8日 | 
3)相应Junit测试脚本、执行结果
 
1 import static org.junit.Assert.*; 2 3 import org.junit.After; 4 import org.junit.Before; 5 import org.junit.Test; 6 7 public class NextDayTest { 8 @Before 9 public void setUp() throws Exception { 10 11 } 12 13 @Test 14 public void testNextdate1() { 15 assertEquals("2000年2月1日", NextDay.nextdate(2000, 1, 31)); 16 } 17 @Test 18 public void testNextdate2() { 19 assertEquals("2000年3月30日", NextDay.nextdate(2000, 3, 29)); 20 } 21 @Test 22 public void testNextdate3() { 23 assertEquals("2004年3月1日", NextDay.nextdate(2004, 2, 29)); 24 } 25 @Test 26 public void testNextdate4() { 27 assertEquals("2004年2月19日", NextDay.nextdate(2004, 2, 18)); 28 } 29 @Test 30 public void testNextdate5() { 31 assertEquals("2009年1月1日", NextDay.nextdate(2008, 12, 31)); 32 } 33 @Test 34 public void testNextdate6() { 35 assertEquals("2008年12月20日", NextDay.nextdate(2008, 12, 19)); 36 } 37 @Test 38 public void testNextdate7() { 39 assertEquals("2012年5月1日", NextDay.nextdate(2012, 4, 30)); 40 } 41 @Test 42 public void testNextdate8() { 43 assertEquals("2012年4月19日", NextDay.nextdate(2012, 4, 18)); 44 } 45 @Test 46 public void testNextdate9() { 47 assertEquals("2001年2月1日", NextDay.nextdate(2001, 1, 31)); 48 } 49 @Test 50 public void testNextdate10() { 51 assertEquals("2001年3月21日", NextDay.nextdate(2001, 3, 20)); 52 } 53 @Test 54 public void testNextdate11() { 55 assertEquals("2002年3月1日", NextDay.nextdate(2002, 2, 28)); 56 } 57 @Test 58 public void testNextdate12() { 59 assertEquals("2002年2月19日", NextDay.nextdate(2002, 2, 18)); 60 } 61 @Test 62 public void testNextdate13() { 63 assertEquals("2004年1月1日", NextDay.nextdate(2003, 12, 31)); 64 } 65 @Test 66 public void testNextdate14() { 67 assertEquals("2003年12月2日", NextDay.nextdate(2003, 12, 1)); 68 } 69 @Test 70 public void testNextdate15() { 71 assertEquals("2005年5月1日", NextDay.nextdate(2005, 4, 30)); 72 } 73 @Test 74 public void testNextdate16() { 75 assertEquals("2005年4月29日", NextDay.nextdate(2005, 4, 28)); 76 } 77 78 @After 79 public void testMain() throws Exception{ 80 //fail("Not yet implemented"); 81 } 82 83 }
这里使用了单个执行测试用例,执行的是语句覆盖、判定覆盖与路径覆盖的测试用例,执行结果为全部通过。

4)给出测试参数化和打包测试的脚本,并生成执行结果
 
1 import static org.junit.Assert.*; 2 3 import java.util.ArrayList; 4 import java.util.Arrays; 5 import java.util.Collection; 6 7 8 import org.junit.Test; 9 import org.junit.runner.RunWith; 10 import org.junit.runners.Parameterized; 11 import org.junit.runners.Parameterized.Parameters; 12 13 @RunWith(Parameterized.class) 14 public class NextDay2Test { 15 NextDay nextDay = new NextDay(); 16 int param1; 17 int param2; 18 int param3; 19 String result; 20 21 @Parameters 22 public static Collection data(){ 23 return Arrays.asList(new Object[][]{ 24 {2000,1,31,"2000年2月1日"}, 25 {2004,3,3,"2004年3月4日"}, 26 {2008,5,31,"2008年6月1日"}, 27 {2000,7,4,"2000年7月5日"}, 28 {2004,8,31,"2004年9月1日"}, 29 {2008,10,5,"2008年10月6日"}, 30 {2000,2,29,"2000年3月1日"}, 31 {2000,2,20,"2000年2月21日"}, 32 {2004,12,31,"2005年1月1日"}, 33 {2008,12,5,"2008年12月6日"}, 34 {2000,4,30,"2000年5月1日"}, 35 {2004,6,7,"2004年6月8日"}, 36 {2001,1,31,"2001年2月1日"}, 37 {2002,3,3,"2002年3月4日"}, 38 {2003,5,31,"2003年6月1日"}, 39 {2005,7,5,"2005年7月6日"}, 40 {2006,8,31,"2006年9月1日"}, 41 {2007,10,5,"2007年10月6日"}, 42 {2009,2,20,"2009年2月21日"}, 43 {2013,2,20,"2013年2月21日"}, 44 {2015,12,31,"2016年1月1日"}, 45 {2017,12,5,"2017年12月6日"}, 46 {2014,4,30,"2014年5月1日"}, 47 {2018,6,7,"2018年6月8日"}, 48 }); 49 } 50 51 public NextDay2Test(int param1,int param2,int param3,String result){ 52 this.param1 = param1; 53 this.param2 = param2; 54 this.param3 = param3; 55 this.result = result; 56 57 } 58 59 @Test 60 public void testNextDay(){ 61 String rs = NextDay.nextdate(param1, param2, param3); 62 assertEquals(rs,result); 63 64 } 65 }
这里使用了测试参数化执行测试用例,测试了条件判定的用例,执行结果为全部通过。
 
1 import org.junit.runner.RunWith; 2 import org.junit.runners.Suite; 3 @RunWith(Suite.class) 4 @Suite.SuiteClasses( 5 { 6 NextDayTest.class, 7 NextDay2Test.class, 8 }) 9 10 11 public class AllTest { 12 13 }
这里使用了打包测试脚本对所有用例进行测试,测试结果为全部通过:

四、测试小结:
在本次测试中,最深刻的体会是代码的规范很重要,在测试的时候遇到了一些问题,源程序中对输入的年、月、日的格式判定在main函数中,但是对日期的输出判断在NextDate方法中,在做NextDate方法的测试时,也就不能对输入日期的格式进行判断,这样会导致设计的测试用例不完整,出现漏测的情况,源程序中,大量的条件判断使得测试的复杂度很高,建议使用java中的函数calndar获取时间的操作,也就能避免大量的判断,这样测试人员在设计测试用例的时候会方便很多,也能降低代码的冗余度。
本次实验基于上一次Junit单元测试的基础上进行,但对每一条用例使用一种方法进行测试,这样能很快地找出测试用例地错误,以及错在哪里,第二点是对测试参数化和打包测试的脚本,这两种方法能够高效地进行测试,同时对测试参数化也避免了大量地测试代码地冗余,打包测试地脚本能够同时执行多个不同类的测试用例,测试更加高效。
通过画程序图与其对应的DD路径图,能够很清楚地写出所有覆盖语句,对编写测试用例有一个很清楚的导向作用,比起一开始的盲目,进步了很多。通过本次的实验,对白盒测试的收获很多。
本次实验中没有发现源程序NextDate方法中的错误,测试用例均能通过。
原文:http://www.cnblogs.com/lingzhiliu/p/6706959.html