JUnit 黑盒测试

测试输入年月日数据是否合法,使用等价类划分、边界值测试等方法。

等价类划分

数字范围1500~2050
有效等价类1500~2050,且是平年,如1997,2015
1500~2050,且是闰年,如2000,2016
无效等价类2050以上
1500以下
数字范围1~12
有效等价类1、3、5、7、8、10、12
4、6、9、11
2
无效等价类1以下
12以上
数字范围1~31
有效等价类1~28
29
30
31
无效等价类1以下
31以上

设计测试用例

输入预期输出
编号
12005910true
22052910false
31900229false
420051510false
52005010false
62005935false
7200590false

受测试代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
public class ValidDate {
public static boolean isLeap(int year) {//判断是否为闰年
if (((year % 4 ==0) && (year % 400 != 0)) || (year % 400 ==0))
return true;
else
return false;
}
public static boolean validDayRange(int day) {//判断Day的有效性
if((day>=1)&&(day<=31)) {
System.out.println("The day is valid day:"+"Day="+day);
return true;
} else {
if((day<1)||(day>31)) {
System.out.println("The day is INvalid day:"+"Day="+day);
return false;
}
}
return false;
}
public static boolean validMonthRange(int month) {//判断month的有效性
if((month>=1)&&(month<=12)) {
System.out.println("The month is valid month:"+"Month="+month);
return true;
} else {
if((month<1)||(month>12)) {
System.out.println("The month is INvalid day:"+"Month="+month);
return false;
}
}
return false;
}
public static boolean validYearRange(int year) {//判断year的有效性
if((year>=1500)&&(year<=2050)) {
System.out.println("The year is valid year:"+"Year="+year);
return true;
} else {
if((year<1500)||(year>2050)) {
System.out.println("The year is INvalid year:"+"Year="+year);
return false;
}
}
return false;
}
//判断年月日的组合是否有效(是否遗漏了30天,月份不能为1,3,5,7,8,10,12;28天2月不是平年)
public static boolean validCombine(int day,int month,int year) {
//如果天数是31天,但月份却是2、4、6、9、11,这是无效的
if((day==31)&&((month==2)||(month==4)||(month==6)||(month==9)||(month==11))) {
System.out.println("日期="+day+"不可能出现在"+month);
return false;
}
//如果天数是30天,但月份却是2,这是无效的
if((day==30)&&(month==2)) {
System.out.println("日期="+day+"不可能出现在二月");
return false;
}
//如果天数是29天,月份却是2,却不是闰年,这是无效的
if((day==29)&&(month==2)&&(isLeap(year))) {
System.out.println("日期="+day+"不可能出现在二月");
return false;
}
return true;
}
//综合判断各函数的有效性
public static boolean validate(int day,int month,int year) {
if(validDayRange(day)) return false;
if(!validMonthRange(month)) return false;
if(!validYearRange(year)) return false;
if(!validCombine(day,month,year)) return false;
return true;
}
}

编写测试类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class ValidDateTest {
@Before
public void setUp() throws Exception {}
@After
public void tearDown() throws Exception {}

@Test
public void testIsLeap() {
System.out.println("isLeap:判断是否为闰年");
boolean result1=ValidDate.isLeap(1600);
boolean result2=ValidDate.isLeap(2016);
boolean result3=ValidDate.isLeap(1900);
boolean result4=ValidDate.isLeap(2049);
assertEquals("第1条数据有问题",true,result1);
assertEquals("第2条数据有问题",true,result2);
assertEquals("第3条数据有问题",false,result3);
assertEquals("第4条数据有问题",false,result4);
}
@Test
public void testValidDayRange() {
System.out.println("validDayRange:判断Day的有效性");
boolean result1=ValidDate.validDayRange(-1);
boolean result2=ValidDate.validDayRange(1);
boolean result3=ValidDate.validDayRange(15);
boolean result4=ValidDate.validDayRange(31);
boolean result5=ValidDate.validDayRange(32);
assertEquals("第1条数据有问题",false,result1);
assertEquals("第2条数据有问题",true,result2);
assertEquals("第3条数据有问题",true,result3);
assertEquals("第4条数据有问题",true,result4);
assertEquals("第5条数据有问题",false,result5);
}
@Test
public void testValidMonthRange() {
System.out.println("validMonthRange:判断month的有效性");
boolean result1=ValidDate.validMonthRange(-1);
boolean result2=ValidDate.validMonthRange(1);
boolean result3=ValidDate.validMonthRange(8);
boolean result4=ValidDate.validMonthRange(12);
boolean result5=ValidDate.validMonthRange(13);
assertEquals("第1条数据有问题",false,result1);
assertEquals("第2条数据有问题",true,result2);
assertEquals("第3条数据有问题",true,result3);
assertEquals("第4条数据有问题",true,result4);
assertEquals("第5条数据有问题",false,result5);
}
@Test
public void testValidYearRange() {
System.out.println("validYearRange:判断year的有效性");
boolean result1=ValidDate.validYearRange(1499);
boolean result2=ValidDate.validYearRange(1500);
boolean result3=ValidDate.validYearRange(2016);
boolean result4=ValidDate.validYearRange(2050);
boolean result5=ValidDate.validYearRange(2051);
assertEquals("第1条数据有问题",false,result1);
assertEquals("第2条数据有问题",true,result2);
assertEquals("第3条数据有问题",true,result3);
assertEquals("第4条数据有问题",true,result4);
assertEquals("第5条数据有问题",false,result5);
}
@Test
public void testValidCombine() {
System.out.println("validCombine:判断年月日的组合是否有效");
boolean result1=ValidDate.validCombine(30,6,2016);
boolean result2=ValidDate.validCombine(31,6,2016);
boolean result3=ValidDate.validCombine(28,2,2016);
boolean result4=ValidDate.validCombine(30,2,2016);
boolean result5=ValidDate.validCombine(29,2,2016);
boolean result6=ValidDate.validCombine(29,2,2017);
assertEquals("第1条数据有问题",true,result1);
assertEquals("第2条数据有问题",false,result2);
assertEquals("第3条数据有问题",true,result3);
assertEquals("第4条数据有问题",false,result4);
assertEquals("第5条数据有问题",true,result5);
assertEquals("第6条数据有问题",false,result6);
}
@Test
public void testValidate() {
System.out.println("validate:综合判断各函数的有效性");
boolean result1=ValidDate.validate(10,9,2005);
boolean result2=ValidDate.validate(10,9,2052);
boolean result3=ValidDate.validate(29,2,1900);
boolean result4=ValidDate.validate(10,15,2005);
boolean result5=ValidDate.validate(10,0,2005);
boolean result6=ValidDate.validate(35,9,2005);
boolean result7=ValidDate.validate(0,9,2005);
assertEquals("第1条数据有问题",true,result1);
assertEquals("第2条数据有问题",false,result2);
assertEquals("第3条数据有问题",false,result3);
assertEquals("第4条数据有问题",false,result4);
assertEquals("第5条数据有问题",false,result5);
assertEquals("第6条数据有问题",false,result6);
assertEquals("第7条数据有问题",false,result7);
}
}

结果分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//第03行 错误1:((year % 4 ==0) && (year % 400 != 0)) || (year % 400 ==0)
//修正:
if (((year % 4 ==0) && (year % 100 != 0)) || (year % 400 ==0))
return true;
else
return false;

//第57行 错误2:(day==29)&&(month==2)&&(isLeap(year))
//修正:
if((day==29)&&(month==2)&&(!isLeap(year))) {
System.out.println("日期="+day+"不可能出现在二月");
return false;
}
return true;

//第65行 错误3:if(validDayRange(day)) return false;
//修正:
if(!validDayRange(day)) return false;
文章目录
  1. 1. 等价类划分
  2. 2. 设计测试用例
  3. 3. 受测试代码
  4. 4. 编写测试类
  5. 5. 结果分析

20160426-junit-2/

本页二维码