实验二+045+杨铭河
一、实验目的
掌握基于覆盖理论与基本路径的基本白盒测试方法和实践
二、实验要求
运用逻辑覆盖测试的覆盖准则设计被测程序的测试用例,并运行测试用例检查程序的正确与否,给出程序缺陷小结。
三、实验内容
根据各位同学自己的被测程序,分别作出各类白盒测试技术的用例设计和相应的Junit脚本。
所有的覆盖的技术:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖,基本路径测试方法。
包括的内容有:
1) 被测原代码
2)依据覆盖技术,测试用例列表:
3)相应Junit测试脚本、执行结果
4)给出测试参数化和打包测试的脚本,并生成执行结果
四、实验步骤
1)被测源代码:http://www.cnblogs.com/trottuer/p/6628391.html
2)依据覆盖技术的测试用例:
流程图:
DD路径图:
DD-路径(只压缩链路经)
程序图节点 | DD路径 |
1 | A |
2 | B |
3 | C |
4 | D |
5 | E |
6 | F |
7、8 | G |
9 | H |
10 | I |
11、12、13 | J |
14 | K |
15 | L |
16 | M |
(I)语句覆盖
A-B-C
A-B-D-E-F
A-B-D-E-F-G-H-I
A-B-D-E-F-G-H-J-K-M
A-B-D-E-F-G-H-J-K-L
测试用例
用例ID | 输入值 | 执行路径 | 预期输出 | ||
a | b | c | |||
1 | 1919 | A-B-C | 年份超出范围 | ||
2 | 2017 | 13 | A-B-D-E-F | 月份超出范围 | |
3 | 2049 | 4 | 32 | A-B-D-E-F-G-H-I | 日期超出范围 |
4 | 12.5 | A-B-D-E-F-G-H-J-K-M | input error! | ||
5 | 1920 | 1 | 1 | A-B-D-E-F-G-H-J-K-L | 1920年1月2日 |
(II)分支覆盖(判断覆盖)与路径覆盖 均同上
(III)条件覆盖
用例ID |
result >= 1920 && result <= 2050 |
result >= 1 && result <= 12 |
!(result >= 1 && result <= end) |
try-catch |
覆盖路径 |
1 | F | T | A-B-C | ||
2 | T | F | T | A-B-D-E-F | |
3 | T | T | F | F | A-B-D-E-F-G-H-I |
4 | T | T | T | F | A-B-D-E-F-G-H-J-K-M |
5 | T | T | T | T | A-B-D-E-F-G-H-J-K-L |
3)相应Junit测试脚本、执行结果
package firstWork; import java.util.Scanner; import junit.framework.TestCase; import org.junit.After; import org.junit.Before; import org.junit.Test; public class TestTest1 extends TestCase{ public String[] input = { "输入年 :", "输入月 :", "输入日 :" }; @Before public void setUp() throws Exception { } @After public void tearDown() throws Exception { } @Test public void testInput1() { Scanner sc = new Scanner("1919"); assertEquals("年份超出范围", firstWork.Test.input(input[0], sc, 0)); } @Test public void testInput1_1() { Scanner sc = new Scanner("1920"); assertEquals(1920, firstWork.Test.input(input[0], sc, 0)); } @Test public void testInput2() { Scanner sc = new Scanner("13"); assertEquals("月份超出范围", firstWork.Test.input(input[1], sc, 1)); } @Test public void testInput2_1() { Scanner sc = new Scanner("6"); assertEquals(6, firstWork.Test.input(input[1], sc, 1)); } @Test public void testInput3() { Scanner sc = new Scanner("32"); assertEquals("日期超出范围", firstWork.Test.input(input[2], sc, 2)); } @Test public void testInput3_1() { Scanner sc = new Scanner("29"); assertEquals(29, firstWork.Test.input(input[2], sc, 2)); } @Test public void testInput4() { Scanner sc = new Scanner("12.5"); assertEquals("input error!", firstWork.Test.input(input[0], sc, 0)); } @Test public void testInput5() { Scanner sc = new Scanner("2051"); assertEquals(2051, firstWork.Test.input(input[0], sc, 0)); } @Test public void testEndDay(){ assertEquals(2,firstWork.Test.endDay(1920,1)); } }
执行结果:
4)给出测试参数化和打包测试的脚本,并生成执行结果
测试参数化:
package firstWork; import static org.junit.Assert.*; import java.util.Arrays; import java.util.Collection; import java.util.Scanner; 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 ParameterizedTest { public static String[] input = { "输入年 :", "输入月 :", "输入日 :" }; private String str; private Scanner sc; private int index; private Object object; @Parameters public static Collection data(){ return Arrays.asList( new Object[][]{ {input[0], new Scanner("1919"), 0, "年份超出范围"}, {input[0], new Scanner("1920"), 0, 1920}, {input[1], new Scanner("13"), 1, "月份超出范围"}, {input[1], new Scanner("6"), 1, 6}, {input[2], new Scanner("32"), 2, "日期超出范围"}, {input[2], new Scanner("29"), 2, 29}, {input[2], new Scanner("12.5"), 2, "input error!"}, } ); } public ParameterizedTest(String str, Scanner sc, int index, Object object) { this.str = str; this.sc = sc; this.index = index; this.object = object; } @Test public void testInputn() { assertEquals(object, firstWork.Test.input(str, sc, index)); } }
结果
打包测试:
package firstWork; import static org.junit.Assert.*; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Suite; @RunWith(Suite.class) @Suite.SuiteClasses({TestTest1.class}) public class AllTest { }
结果:
4、测试小结:
- 测试总结与心得体会
- 答:
- 1、程序代码错误输出时是采用print输出,无法直接采用assertEquals()进行结果测试。