------------恢復內容開始------------
等價類劃分法定義:將用戶所有可能輸入的數據,劃分爲若干中情況,把每一種情況找一些具有
代表性的數據作爲測試用例,而這種選擇測試類的方法,就叫做等價類劃分,它是屬於黑盒測試的;
****用等價類劃分法解決下列問題****
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天
***********************
題目分析:輸入變量:year\month\day
問題關鍵:當year和month取不同值時,對應day的取值範圍也不同:1~28、1~29、1~30、1~31
要考慮2月份的天數問題,閏年問題;月份還包含30天和31天的問題;12月最後一天的第二天是下一年的第一天
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無效 |