标签:整数 测试用例 ges 进一步 equal ram his 自己的 8 8
被测代码地址:http://www.cnblogs.com/chenyp1996/p/6619103.html
掌握基于覆盖理论与基本路径的基本白盒测试方法和实践
运用逻辑覆盖测试的覆盖准则设计被测程序的测试用例,并运行测试用例检查程序的正确与否,给出程序缺陷小结。
根据各位同学自己的被测程序,分别作出各类白盒测试技术的用例设计和相应的Junit脚本。
所有的覆盖的技术:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖,基本路径测试方法。
包括的内容有:
1) 被测原代码
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Scanner; /*NextDate函数问题 NextDate函数说明一种复杂的关系,即输入变量之间逻辑关系的复杂性 NextDate函数包含三个变量month、day和year,函数的输出为输入日期后一 天的日期。 要求输入变量month、day和year均为整数值,并且满足下列条件: 条件1 1≤ month ≤12 否则输出,月份超出范围 条件2 1≤ day ≤31 否则输出,日期超出范围 条件3 1912≤ year ≤2050 否则输出:年份超出范围 String nextdate(int m,int d,int y) 注意返回值是字符串。 程序要求: 1)先显示“请输入日期” 2)不满足条件1,返回:“月份超出范围”;不满足条件2,返回:“日期超出范围”; 不满足条件3,返回:“年份超出范围”;如果出现多个不满足,以最先出现不满足的 错误返回信息。3)条件均满足,则输出第二天的日期:格式“****年**月**日”(如果 输入2050年12月31日,则正常显示2051年1月1日*/ public class MyDate { public static String nextdate(int month, int day, int year) { if (month < 1 || month > 12) return "月份超出范围"; if (day < 1 || day > 31) return "日期超出范围"; if (year < 1912 || year > 2050) return "年份超出范围"; SimpleDateFormat sFormat = new SimpleDateFormat("yyyyMMdd"); sFormat.setLenient(false); try { Calendar c = Calendar.getInstance(); c.setTime(sFormat.parse("" + year + String.format("%02d", month) + String.format("%02d", day))); c.add(Calendar.DATE, 1); return c.get(Calendar.YEAR) + "年" + (c.get(Calendar.MONTH) + 1) + "月" + c.get(Calendar.DATE) + "日"; } catch (ParseException e) { return "日期不存在"; } } public static void main(String[] args) { String input = ""; int month, date, year;//优化效率 Scanner scan = new Scanner(System.in); while (true) { System.out.print("请输入日期"); input = scan.nextLine().trim(); String[] buf = input.split("[\\s+::,,/]");// 支持多种分割方式 if (input.equals(""))//无输入 continue; else if (input.equalsIgnoreCase("return"))// 改进退出方式 break; else if (buf.length == 3) { try { month = Integer.valueOf(buf[1]); date = Integer.valueOf(buf[2]); year = Integer.valueOf(buf[0]); System.out.println(nextdate(month, date, year)); } catch (NumberFormatException e) { System.out.println("日期格式错误"); } } else//长度不对 System.out.println("日期格式错误"); } System.out.println("谢谢使用,再见~"); scan.close(); } }
2)依据覆盖技术,测试用例列表:
程序流图 DD路径图
DD-路径(只压缩链路经)
程序图节点 |
DD-路径 |
22 |
A |
23 |
B |
24 |
C |
25 |
D |
26 |
E |
27 |
F |
28 |
G |
31-34 |
H |
35 |
I |
36,37,38 |
J |
39 |
M |
(I)语句覆盖:
A-B-C-K
A-B-D-E-K
A-B-D-F-G-K
A-B-D-F-H-I-K
A-B-D-F-H-J-K
测试用例:
用例ID |
输入值 |
执行路径 |
预期输出 |
1 |
2015 15 14 |
A-B-C-K |
月份超出范围 |
2 |
2015 12 36 |
A-B-D-E-K |
日期超出范围 |
3 |
1111 12 11 |
A-B-D-F-G-K |
年份超出范围 |
4 |
2001 01 01 |
A-B-D-F-H-I-K |
2001年1月2日 |
5 |
2001 02 29 |
A-B-D-F-H-J-K |
日期不存在 |
II)分支覆盖(判断覆盖):
A-B-C-K
A-B-D-E-K
A-B-D-F-G-K
A-B-D-F-H-I-K
A-B-D-F-H-J-K
测试用例:
用例ID |
输入值 |
执行路径 |
预期输出 |
1 |
2013 22 14 |
A-B-C-K |
月份超出范围 |
2 |
2011 11 38 |
A-B-D-E-K |
日期超出范围 |
3 |
2051 11 28 |
A-B-D-F-G-K |
年份超出范围 |
4 |
2003 11 12 |
A-B-D-F-H-I-K |
2003年11月13日 |
5 |
2005 06 31 |
A-B-D-F-H-J-K |
日期不存在 |
(III)路径覆盖:
A-B-C-K
A-B-D-E-K
A-B-D-F-G-K
A-B-D-F-H-I-K
A-B-D-F-H-J-K
测试用例:
用例ID |
输入值 |
执行路径 |
预期输出 |
1 |
1998 87 11 |
A-B-C-K |
月份超出范围 |
2 |
2011 11 56 |
A-B-D-E-K |
日期超出范围 |
3 |
1000 07 25 |
A-B-D-F-G-K |
年份超出范围 |
4 |
2017 04 13 |
A-B-D-F-H-I-K |
2017年04月14日 |
5 |
2000 04 31 |
A-B-D-F-H-J-K |
日期不存在 |
(IV)条件覆盖:各个条件取真或假的可能至少执行一次
编号 |
m<1 ||m>12 |
d<1|| d>31 |
y<1912||y>2051 |
覆盖路径 |
1 |
F |
F |
F |
B-C-K |
2 |
F |
F |
T |
B-C-K |
3 |
F |
T |
T |
B-C-K |
4 |
T |
F |
F |
B-D-E-K |
5 |
T |
T |
F |
B-D-F-G-K |
6 |
T |
T |
T |
B-D-F-H |
编号 |
c.add(Calendar.DATE, 1); |
覆盖路径 |
7 |
T |
H-I-K |
8 |
F |
H-J-K |
测试用例:
用例ID |
输入值 |
执行路径 |
覆盖条件 |
预期输出
|
1 |
2051 14 36 |
A-B-C-K |
1 |
月份超出范围 |
2 |
2055 14 30 |
A-B-C-K |
2 |
月份超出范围 |
3 |
2014 15 22 |
A-B-C-K |
3 |
月份超出范围 |
4 |
1000 11 32 |
A-B-D-E-K |
4 |
日期超出范围 |
5 |
1000 11 22 |
A-B-D-F-G-K |
5 |
年份超出范围 |
6 |
2014 11 25 |
A-B-D-F-H-I-K |
6,7 |
2014年11月26日 |
7 |
2000 02 28 |
A-B-D-F-H-I-K |
6,7 |
2000年02月29日 |
8 |
2014 06 31 |
A-B-D-F-H-J-K |
6,8 |
日期不存在 |
3)相应Junit测试脚本、执行结果
import static org.junit.Assert.*; import org.junit.Before; import org.junit.Test; public class MyDateText { MyDate date = new MyDate(); @Before public void setUp() throws Exception { } @Test public void Test1() { assertEquals("月份超出范围",date.nextdate(15, 14, 2015)); } @Test public void Test2() { assertEquals("日期超出范围",date.nextdate(12, 36, 2015)); } @Test public void Test3() { assertEquals("年份超出范围",date.nextdate(12, 11,1111 )); } @Test public void Test4() { assertEquals("2001年1月2日",date.nextdate(01, 01,2001 )); } @Test public void Test5() { assertEquals("日期不存在",date.nextdate(2,29, 2001)); }@Test public void Test6() { assertEquals("月份超出范围",date.nextdate(22, 14, 2013)); } @Test public void Test7() { assertEquals("日期超出范围",date.nextdate(11, 38, 2001)); } @Test public void Test8() { assertEquals("年份超出范围",date.nextdate(11, 28, 2051)); } @Test public void Test9() { assertEquals("2003年11月13日",date.nextdate(11, 12, 2003)); } @Test public void Test10() { assertEquals("日期不存在",date.nextdate(06, 31, 2006)); } @Test public void Test11() { assertEquals("月份超出范围",date.nextdate(87, 11, 1998)); } @Test public void Test12() { assertEquals("日期超出范围",date.nextdate(11, 56, 2001)); } @Test public void Test13() { assertEquals("年份超出范围",date.nextdate(07, 25, 1000)); } @Test public void Test14() { assertEquals("2017年4月14日",date.nextdate(04, 13, 2017)); } @Test public void Test15() { assertEquals("日期不存在",date.nextdate(04, 31, 2000)); } @Test public void Test16() { assertEquals("月份超出范围",date.nextdate(14, 36, 2051)); } @Test public void Test17() { assertEquals("月份超出范围",date.nextdate(14, 30, 2055)); } @Test public void Test18() { assertEquals("月份超出范围",date.nextdate(15, 22, 2014)); } @Test public void Test19() { assertEquals("日期超出范围",date.nextdate(11, 32, 1000)); } @Test public void Test20() { assertEquals("年份超出范围",date.nextdate(11, 22, 1000)); } @Test public void Test21(){ assertEquals("2014年11月26日",date.nextdate(11,25,2014)); } @Test public void Test22() { assertEquals("2000年2月29日",date.nextdate(02, 28, 2000)); } @Test public void Test23() { assertEquals("日期不存在",date.nextdate(06, 31, 2014)); } }
4)给出测试参数化和打包测试的脚本,并生成执行结果
1. 参数化测试
import static org.junit.Assert.*; import java.util.Arrays; import java.util.Collection; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; @RunWith(Parameterized.class) public class NextDateParamTest { private int param1; private int param2; private int param3; private String result; MyDate date = new MyDate(); @Parameters public static Collection data(){ return Arrays.asList(new Object[][]{ {15,14,2015,"月份超出范围"}, {12,36,2015,"日期超出范围"}, {12,11,1111,"年份超出范围"}, {01,01,2001,"2001年1月2日"}, {02,29,2001,"日期不存在"}, }); } public NextDateParamTest(int param1,int param2,int param3,String result){ this.param1 = param1; this.param2 = param2; this.param3 = param3; this.result = result; } @Test public void testParam(){ String rs = date.nextdate(param1, param2, param3); assertEquals(rs,result); } }
2.打包测试
import static org.junit.Assert.*; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Suite; @RunWith(Suite.class) @Suite.SuiteClasses( { MyDateTest.class, NextDateParamTest.class, } ) public class AllMydateTest { }
标签:整数 测试用例 ges 进一步 equal ram his 自己的 8 8
原文地址:http://www.cnblogs.com/chenxxiaol/p/6704143.html