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函数的参数进行读取可以方便测试的进行以及测试用例的编写。
- 调试与测试的不同体会。
测试可以让程序更加完善,而调试仅仅只是修改程序对当前输入的数据的处理。