- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) >
- Java黑盒測試之nextDate函數測試
(1)掌握應用黑盒測試技術(shù)進(jìn)行測試用例設計。
(2)掌握對測試用例進(jìn)行優(yōu)化設計方法。
日期問(wèn)題
測試以下程序:該程序有三個(gè)輸入變量month、day、year(month、day和year均為整數值,并且滿(mǎn)足:1≤month≤12、1≤day≤31和1900≤year≤2050),分別作為輸入日期的月份、日、年份,通過(guò)程序可以輸出該輸入日期在日歷上隔一天的日期。例如,輸入為2004 年11月30日,則該程序的輸出為2004年12月1日。
(1)劃分等價(jià)類(lèi),按照等價(jià)類(lèi)劃分法設計測試用例;
(2)編寫(xiě)nextDate函數;
(3)掌握Junit4的用法,使用Junit4測試nextDate函數。
JUnit4是JUnit框架有史以來(lái)的最大改進(jìn),其主要目標便是利用Java5的Annotation特性簡(jiǎn)化測試用例的編寫(xiě)。
掌握Junit4定義的一些常見(jiàn)Annotations:
org.junit.Test org.junit.Before org.junit.After org.junit.BeforeClass org.junit.AfterClass org.junit.Ignore org.junit.runner.RunWith org.junit.runners.Suite.SuiteClasses org.junit.runners.Parameterized.Parameters
(1)根據題目要求編寫(xiě)測試用例;
(2)準備nextDate函數,使用Junit4測試執行測試;
(3)撰寫(xiě)實(shí)驗報告。
(1)根據題目要求編寫(xiě)測試用例
1)劃分等價(jià)類(lèi)并編號
2)為有效等價(jià)類(lèi)設計測試用例
3)為每一個(gè)無(wú)效等價(jià)類(lèi)至少設計一個(gè)測試用例
(2)編寫(xiě)nextDate函數,使用Junit4測試執行測試
被測代碼
package io.shentuzhigang.demo.blackbox; import java.util.regex.Pattern; /** * @author ShenTuZhiGang * @version 1.0.0 * @date 2021-05-06 15:43 */ public class Date { private static final Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$"); public static String nextDate(String s_year, String s_month, String s_day) { //檢測是否存在無(wú)效字符 if (!(isInteger(s_year) && isInteger(s_month) && isInteger(s_day))) { return "無(wú)效的輸入日期!"; } //將字符串轉為int int year = Integer.parseInt(s_year); int month = Integer.parseInt(s_month); int day = Integer.parseInt((s_day)); boolean flag = false; if (year < 1900 || year > 2050) { return ("年的值不在指定范圍之內"); } else if (month > 12 || month < 1) { return ("月的值不在指定范圍之內"); } else if (day > 31 || day < 1) { return ("日的值不在指定范圍之內"); } switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: if (day == 31) { day = 1; month = month + 1; } else { day = day + 1; } break; case 4: case 6: case 9: case 11: if (day == 30) { day = 1; month = month + 1; } else if (day == 31) { flag = true; } else { day = day + 1; } break; case 12: if (day == 31) { day = 1; month = 1; year = year + 1; } else { day = day + 1; } break; case 2: { if (((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)) { // 閏年 if (day == 29) { day = 1; month = 3; } else if (day < 29) { day = day + 1; } else { flag = true; // day超過(guò)29 } } else { //非閏年 if (day == 28) { day = 1; month = 3; } else if (day < 28) { day = day + 1; } else { flag = true; } } } break; default: } if (year > 2050) { return ("年的值不在指定范圍之內"); } else if (flag) { return ("日的值不在指定范圍之內"); } else { return ("下一天是" + year + "年" + month + "月" + day + "日!"); } } /** * 判斷輸入字符串是否是整數型 * * @param str * @return */ public static boolean isInteger(String str) { return pattern.matcher(str).matches(); } }
測試代碼
package io.shentuzhigang.demo.blackbox; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import java.util.Arrays; import java.util.Collection; /** * @author ShenTuZhiGang * @version 1.0.0 * @date 2021-05-06 15:43 */ @RunWith(Parameterized.class) public class DateTests { private String input1; private String input2; private String input3; private String expected; @Parameters public static Collection<?> prepareData(){ String [][] object = { // 有效等價(jià)類(lèi) {"2016","2","29","下一天是2016年3月1日!"}, {"2017","1","28","下一天是2017年1月29日!"}, {"2017","1","31","下一天是2017年2月1日!"}, {"2017","4","30","下一天是2017年5月1日!"}, // 無(wú)效等價(jià)類(lèi) {"1899","3","1","年的值不在指定范圍之內"}, {"2051","3","1","年的值不在指定范圍之內"}, {"205%","3","1","無(wú)效的輸入日期!"}, {"1901","-1","1","月的值不在指定范圍之內"}, {"1901","13","1","月的值不在指定范圍之內"}, {"1901","1%","1","無(wú)效的輸入日期!"}, {"1901","1","-1","日的值不在指定范圍之內"}, {"2016","2","30","日的值不在指定范圍之內"}, {"2017","2","29","日的值不在指定范圍之內"}, {"2017","3","32","日的值不在指定范圍之內"}, {"2017","4","31","日的值不在指定范圍之內"}, {"2017","4","32","日的值不在指定范圍之內"}, {"2017","4","3%","無(wú)效的輸入日期!"} }; return Arrays.asList(object); } public DateTests(String input1,String input2,String input3,String expected){ this.input1 = input1; this.input2 = input2; this.input3 = input3; this.expected = expected; } @Test public void testDate(){ String result = Date.nextDate(input1,input2,input3); Assert.assertEquals(expected,result); } }
測試結果
1.用例?發(fā)生故障的原因是程序先判斷day為29就變?yōu)?月1日,而不先判斷是否為閏年,于是用例?的輸出結果為2007-3-1而不是無(wú)效輸入日期。
2.用例?發(fā)生故障的原因是程序沒(méi)有先判斷接收的三個(gè)參數是否在指定范圍內,而是先根據month進(jìn)行數據處理,再判斷處理后的參數是否在指定范圍內,用例?的參數因為month為3所以直接day+1由0變成1再判斷day在指定范圍內,所以用例?的輸出結果為1998-3-1而不是日的值不在指定范圍內。
到此這篇關(guān)于Java黑盒測試之nextDate函數測試的文章就介紹到這了,更多相關(guān)Java nextDate函數測試內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站