黑盒测试——NextDate函数测试(判定表驱动法)
,分别作为输入日期的月份、日、年份,通过程序可以输出该输入日期在日历上下一天的日期。Y2:{year:year不是1900到2050年之间的闰年};Y1:{year:year是1900到2050年之间的闰年};:NextDate的判定表驱动法及。第二步:分析有效等价类。日,则该程序的输出为。第五步:设计测试用例。
程序有三个输入变量month、day、year(month、day和year均为整数值,并且满足:1≤month≤12、1≤day≤31、1900≤ year ≤2050。),分别作为输入日期的月份、日、年份,通过程序可以输出该输入日期在日历上下一天的日期。例如,输入为2005年11月29日,则该程序的输出为2005年11月30日。
(1)根据题目要求使用判定表驱动法设计测试用例
第一步:分析题目
输入变量:年份(year)、月份(month)、日期(day),输入变量的取值范围,输入变量的取值范围为:1900≤year≤2050,1≤month≤12,1≤day≤31。
本题目的可能执行的操作为:
1)无效日期;
2)day+1;
3)day=1;
4)month+1;
5)month=1;
6)year+1;
第二步:分析有效等价类
(1)month变量的有效等价类
M1:{month:month=4,6,9,11};
M2:{month:month=1,3,5,7,8,10};
M3:{month:month=12};
M4:{month:month=2};
(2)day变量的有效等价类
D1:{day:1≤day≤27};
D2:{day:day=28 };
D3:{day:day =29};
D4:{day:day =30};
D5:{day:day =31};
3)year变量的有效等价类
Y1:{year:year是1900到2050年之间的闰年};
Y2:{year:year不是1900到2050年之间的闰年};
第三步:创建判定表
根据条件桩三个变量的有效等价类的各种可能组合生成判定表:
第四步:化简判定表
根据所创建的初始判定表去化简,生成化简后的判定表:
第五步:设计测试用例
根据化简后的判定表设计出相应的测试用例:
(2)编写NextDate函数,使用Junit4测试执行测试
1)被测代码
package com.example.experiment3;
/**
Created by IntelliJ IDEA.
User: Starfall
Date: 2022/10/26 0026
Time: 20:32
*/
public class NextDate {
//获得某年中的某个月份的总天数
private static int getDays(int year, int month) {
if (month == 2) {
return (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) ? 29 : 28;
} else {
return (month == 4 || month == 6 || month == 9 || month == 11) ? 30 : 31;
}
}
//输入参数为年、月、日三个字符串,输出结果为 "YYYY-MM-DD" 格式的下一天日期或 "输入无效" 字符串
public static String nextDate(String yearStr, String monthStr, String dayStr){
//判断三个输入值是否存在空值
if (yearStr == null || monthStr == null || dayStr == null
|| yearStr.trim().equals("") || monthStr.trim().equals("") || dayStr.trim().equals("")) {
return "输入无效";
} else {
yearStr = yearStr.trim();
monthStr = monthStr.trim();
dayStr = dayStr.trim();
}
//判断是否含有非数字字符
int year, month, day;
try {
year = Integer.parseInt(yearStr);
month = Integer.parseInt(monthStr);
day = Integer.parseInt(dayStr);
} catch (Exception e) {
return "输入无效";
}
//判断各个输入值是否在合法的范围内
if (year < 1900 || year > 2050) {
return "输入无效";
}
if (month < 1 || month > 12) {
return "输入无效";
}
if (day < 1 || day > getDays(year, month)) {
return "输入无效";
}
//日期向后加一天,然后返回
day = day + 1;
if (day > getDays(year, month)) {
day = 1;
month = month + 1;
if (month > 12) {
month = 1;
year = year + 1;
}
}
return year + "-" + (month < 10 ? "0" + month : month) + "-" + (day < 10 ? "0" + day : day);
}
}
2)测试类
package com.example.experiment3;
import org.junit.Assert;
import org.junit.Test;
/**
Created by IntelliJ IDEA.
User: Starfall
Date: 2022/10/26 0026
Time: 20:32
*/
public class NextDateTest {
@Test
public void testDate01() {
String NextDay=NextDate.nextDate("2022","6","27");
String result = NextDay.toString();
Assert.assertEquals("2022-06-28", result);
}
@Test
public void testDate02() {
String NextDay=NextDate.nextDate("2022","4","30");
String result = NextDay.toString();
Assert.assertEquals("2022-05-01", result);
}
@Test
public void testDate03() {
String NextDay=NextDate.nextDate("2022","11","31");
String result = NextDay.toString();
Assert.assertEquals("输入无效", result);
}
@Test
public void testDate04() {
String NextDay=NextDate.nextDate("2022","10","27");
String result = NextDay.toString();
Assert.assertEquals("2022-10-28", result);
}
@Test
public void testDate05() {
String NextDay=NextDate.nextDate("2022","10","31");
String result = NextDay.toString();
Assert.assertEquals("2022-11-01", result);
}
@Test
public void testDate06() {
String NextDay=NextDate.nextDate("2022","12","30");
String result = NextDay.toString();
Assert.assertEquals("2022-12-31", result);
}
@Test
public void testDate07() {
String NextDay=NextDate.nextDate("2049","12","31");
String result = NextDay.toString();
Assert.assertEquals("2050-01-01", result);
}
@Test
public void testDate08() {
String NextDay=NextDate.nextDate("2020","2","1");
String result = NextDay.toString();
Assert.assertEquals("2020-02-02", result);
}
@Test
public void testDate09() {
String NextDay=NextDate.nextDate("2008","2","29");
String result = NextDay.toString();
Assert.assertEquals("2008-03-01", result);
}
@Test
public void testDate10() {
String NextDay=NextDate.nextDate("2008","2","31");
String result = NextDay.toString();
Assert.assertEquals("输入无效", result);
}
@Test
public void testDate11() {
String NextDay=NextDate.nextDate("2018","2","14");
String result = NextDay.toString();
Assert.assertEquals("2018-02-15", result);
}
@Test
public void testDate12() {
String NextDay=NextDate.nextDate("2018","2","28");
String result = NextDay.toString();
Assert.assertEquals("2018-03-01", result);
}
@Test
public void testDate13() {
String NextDay=NextDate.nextDate("2018","2","29");
String result = NextDay.toString();
Assert.assertEquals("输入无效", result);
}
}
3)测试结果
(1)运行测试
(2)覆盖测试
更多推荐
所有评论(0)