等价类划分法定义:将用户所有可能输入的数据,划分为若干中情况,把每一种情况找一些具有
代表性的数据作为测试用例,而这种选择测试类的方法,就叫做等价类划分,它是属于黑盒测试的;
****用等价类划分法解决下列问题****
NextDate 函数包含三个变量:month 、 day 和 year ,函数的输出为输入日期后一天的日期。 例如,输入为 2020年3月7日,则函数的输出为 2020年3月8日 。要求输入变量 month 、 day 和 year 均为整数值,并且满足下列条件:
①1≤month≤12
②1≤day≤31
③1920≤year≤2050
作答格式:等价类表+测试用例表
*********科普*********
三五七八十腊 三十一天永不差,四六九冬三十整,惟有二月二十八,闰年还要把一日加
--闰年的判断--(中国的年有平年、闰年之分,基本是4年一闰,其余都是平年,第一次接触‘闰’这个概念是学习鲁迅先生的短片小说“少年闰土”,但是他叫闰土,是因为他是闰月出生,五行缺土,闰月是个很复杂的概念;啊~,现在有点儿明白鲁迅先生的小说为何受欢迎了,童年真的不能回忆呀)
普通闰年:能被4整除
世纪闰年:能被400整除
闰年2月29天,平年2月28天
***********************
题目分析:输入变量:yearmonthday
问题关键:
年:分闰年和平年
月:1、3、5、7、8、10、12-------永远31天||||||||||但8月31~下一天~9月1--------12月31天~下一天~下一年的1月1
4、6、9、11---------永远30天
2月--闰年29天,平年28天
日:分类--1~27、28、29、30、31
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public static ArrayList NextDate(int nowYear, int nowMonth, int nowDay) 2 { 3 ArrayList arr = new ArrayList(); 4 if (nowYear <= 3000 && nowYear >= 1000 && nowMonth <= 12 && nowMonth >= 1 && nowDay >= 1 && nowDay <= getDays(nowYear, nowMonth)) 5 { 6 int nextYear; 7 int nextMonth; 8 int nextDay; 9 if (nowDay == getDays(nowYear, nowMonth)) 10 { 11 if (nowMonth == 12) 12 { 13 nextYear = nowYear + 1; 14 nextMonth = 1; 15 nextDay = 1; 16 } 17 else 18 { 19 nextYear = nowYear; 20 nextMonth = nowMonth + 1; 21 nextDay = 1; 22 } 23 } 24 else 25 { 26 nextYear = nowYear; 27 nextMonth = nowMonth; 28 nextDay = nowDay + 1; 29 } 30 arr.Add(nextYear); 31 arr.Add(nextMonth); 32 arr.Add(nextDay); 33 } 34 else 35 { 36 arr.Add("错误年份"); 37 arr.Add("错误月份"); 38 arr.Add("错误天数"); 39 } 40 return arr; 41 } 42 protected static bool isRun(int year) 43 { 44 if (year % 4 == 0 && year % 400 != 0) 45 { 46 return true; 47 } 48 return false; 49 } 50 protected static int getDays(int year, int month) 51 { 52 int days = 0; 53 switch (month) 54 { 55 case 1: 56 case 3: 57 case 5: 58 case 7: 59 case 8: 60 case 10: 61 case 12: days = 31; break; 62 case 2: days = isRun(year) ? 29 : 28; break; 63 case 4: 64 case 6: 65 case 9: 66 case 11: days = 30; break; 67 } 68 return days; 69 }
************* NextDate 函数的等价类*************
输入条件 |
有效等价类 |
唯一标识 |
无效等价类 |
唯一标识 |
year |
1920-2050间的闰年 |
1 |
year<1920 |
12 |
1920-2050间的平年 |
2 |
year>2050 |
13 |
|
month |
month=4,6,9,11 |
3 |
month<1 |
14 |
month=1,3,5,7,8,10 |
4 |
month>12 |
15 |
|
month=12 |
5 |
|
|
|
month=2 |
6 |
|
|
|
day |
1<=day<=27 |
7 |
day<1 |
16 |
day=28 |
8 |
day>31 |
17 |
|
day=29 |
9 |
|
|
|
day=30 |
10 |
|
|
|
day=31 |
11 |
|
******************等价类测试用例*****************
覆盖测试用例编号 |
输入 |
期望输出 |
||
month |
day |
year |
||
3-10-2 |
6 |
30 |
2007 |
2007/7/1 |
4-11-2 |
8 |
31 |
2007 |
2007/9/1 |
6-7-2 |
2 |
27 |
2007 |
2007/2/28 |
6-8-2 |
2 |
28 |
2007 |
2007/3/1 |
6-9-1 |
2 |
29 |
2004 |
2004/3/1 |
5-11-2 |
12 |
31 |
2007 |
2008/1/1 |
3-11-2 |
9 |
31 |
2007 |
不可能的输入日期 |
6-9-2 |
2 |
29 |
2007 |
不可能的输入日期 |
6-10-2 |
2 |
30 |
2007 |
不可能的输入日期 |
15-7-2 |
15 |
9 |
2007 |
变量month无效 |
3-17-2 |
9 |
35 |
2007 |
变量day无效 |
3-7-13 |
9 |
9 |
2060 |
变量year无效 |