1、修正流程图:根据新修改的代码,再次修正流程图
2、测试用例设计:依据所有的覆盖理论,分别写出相应的测试用例设计。
测试编号 |
数据 |
预期结果 |
输出结果 |
是否通过 |
001 |
abc,abc,123,123 |
提示输入错误,重新输入 |
程序崩溃,抛出异常 |
× |
002 |
123,abc,abc,123 |
提示输入错误,重新输入 |
程序崩溃,抛出异常 |
× |
003 |
123,12,abc,abc |
提示输入错误重新输入 |
程序崩溃,抛出异常 |
× |
004 |
+0,+0,-0,-0,0 |
输出佣金0 |
输入的数量不满足要求,请重新输入 销售金额为:0.0 |
× |
005 |
-1,-1,0,0 |
提示输入错误重新输入 |
销售金额为:0.0 |
× |
006 |
0,-1,-1,0 |
提示输入错误重新输入 |
销售金额为:0.0 |
× |
007 |
0,0,-1,-1 |
提示输入错误重新输入 |
销售金额问为:0.0 |
× |
008 |
空 |
提示输入错误,重新输入 |
程序崩溃,抛出异常 |
× |
009 |
2147483648,2147483648,0,0 |
提示输入有误重新输入 |
程序崩溃,抛出异常 |
× |
010 |
0,2147483648,2147483648,0 |
提示输入有误重新输入 |
程序崩溃,抛出异常 |
× |
011 |
0,0,2147483648,2147483648 |
提示输入有误重新输入 |
程序崩溃,抛出异常 |
× |
012 |
12.3,12.3,0,0 |
提示输入有误重新输入 |
程序崩溃,抛出异常 |
× |
013 |
0,13.56,13.56,0 |
提示输入有误重新输入 |
程序崩溃,抛出异常 |
× |
014 |
0,0,16.9,16.69 |
提示输入有误重新输入 |
程序崩溃,抛出异常 |
× |
015 |
3,3,9(销售额小于1000) |
输出佣金:34.2 |
输出销售佣金为:34.2 |
✔ |
016 |
5,20,50(销售额等于1000) |
输出佣金:100 |
输出销售佣金为:100 |
✔ |
017 |
9,20,50(销售金额大于1000小于1800) |
输出佣金:148 |
输出销售佣金为:148 |
✔ |
018 |
10,20,100(销售金额等于1800) |
输出佣金:220 |
输出销售佣金为:220 |
✔ |
019 |
30,60,90 |
输出佣金:604 |
输出销售佣金为:604 |
✔ |
语句覆盖:001、002、003
判定覆盖:004—019
3、单元测试框架:采用单元测试框架Junit,初步简单的自动化执行测试用例。
package other; import org.junit.*; import org.junit.Test; public class Commission_caculatorTest { @Test public void testCaseOne() { String s1 = "3"; String s2 = "3"; String s3 = "9"; Commission_caculator caculator = new Commission_caculator(); double result = caculator.Commission(s1, s2, s3); Assert.assertEquals(34.2, result, 0.003); } @Test public void testCaseTwo() { String s1 = "5"; String s2 = "20"; String s3 = "50"; Commission_caculator caculator = new Commission_caculator(); double result = caculator.Commission(s1, s2, s3); Assert.assertEquals(100, result, 0.003); } @Test public void testCaseThree() { String s1 = "9"; String s2 = "20"; String s3 = "50"; Commission_caculator caculator = new Commission_caculator(); double result = caculator.Commission(s1, s2, s3); Assert.assertEquals(148, result, 0.003); } @Test public void testCaseFour() { String s1 = "10"; String s2 = "20"; String s3 = "100"; Commission_caculator caculator = new Commission_caculator(); double result = caculator.Commission(s1, s2, s3); Assert.assertEquals(220, result, 0.003); } @Test public void testCaseSix() { String s1 = "30"; String s2 = "60"; String s3 = "90"; Commission_caculator caculator = new Commission_caculator(); double result = caculator.Commission(s1, s2, s3); Assert.assertEquals(604, result, 0.003); } }
3、测试结果:根据测试用例设计,执行测试,并给出TestRunner测试结果图。
Commission函数的测试结果:
由于只能一次性自动地向控制台输入字符串,而main函数和Input函数都是两次或两次以上从控制台读取输入。
4、测试小结:
- 测试用例编写的心得体会。
尽量根据程序流程图编写测试用例,可以覆盖更多的路径和条件。
- 采用单元测试框架,和用main()方法调用的心得体会。
可以使用System.setIn()函数向控制台一次性指定输入,使用System.setOut()函数得到控制台的输出,进而使用assertEquals()进行判断。在写主函数时,尽量用main函数的参数进行读取可以方便测试的进行以及测试用例的编写。
- 调试与测试的不同体会。
测试可以让程序更加完善,而调试仅仅只是修改程序对当前输入的数据的处理。