此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2146
git地址:https://git.coding.net/qiaojingyu/f4.git
单元测试代码详见上述git地址中的Test_f4.cs
结对伙伴:乔静玉
集成环境:Visual Studio 2017
编程语言:C#
测试框架:NUnit3
测试环境地配置,以及如何编写测试用例等参考了冉华学长的博客 http://www.cnblogs.com/ranh941/p/7629279.html ,在此深表感谢!
一、编写测试用例
四则运算的实现大概可以分为几个步骤,随机生成试题的字符串,将字符串转化为后缀表达式(逆波兰式),对后缀表达式进行计算得到结果。
差不多是三个步骤,针对这三个步骤,我们讨论设计了相应功能的测试用例。
(一)针对用于生成试题字符串的CreateEquation类
对生成的试题是否是字符串string类型进行了判断。
(二)针对生成逆波兰式的类CreateRPN
1. 无括号情况:
-
输入字符串:“19-4-2-8=”
期望输出结果:“19 4 - 2 - 8 - ”
-
输入字符串:“5*6+7/9=”
期望输出结果:“5 6 * 7 9 / +”
2. 有括号情况:
-
输入字符串:“1-2-(3-4)=”
期望输出结果:“1 2 - 3 4 - -”
-
输入字符串:“(1+2)*3-4=”
期望输出结果:“1 2 + 3 * 4 -”
-
输入字符串:“1+((2-3)/4)=”
期望输出结果:“1 2 3 - 4 / +”
(三)针对计算逆波兰式的类Calculator
- 输入字符串:“1 2 +”
期望输出结果:3
-
输入字符串:“4 5 -”
期望输出结果:-1
-
输入字符串:“2 3 *”
期望输出结果:6
-
输入字符串:“12 6 /”
期望输出结果:2
-
输入字符串:“19 14 - 12 - 18 -”
期望输出结果:-25
-
输入字符串:“1 2 3 - 4 / +”
期望输出结果:0.75
二、测试情况
(一)第一次运行所有测试用例:
1. 生成逆波兰式改错:通过下图可以查看到错误在于空格的添加。
对相应代码的修改如下:
1 int flag = 0; 2 ... 3 switch (strOld[i]) 4 { 5 case '+': 6 case '-': 7 case '*': 8 case '/': 9 ... 10 ope.Push(strOld[i]); 11 flag = 1; 12 ... 13 default: 14 num.Push(strOld[i]); 15 if ((flag == 1) && (i != 0)) 16 { 17 strNew += " "; 18 flag = 0; 19 } 20 strNew += strOld[i]; 21 break; 22 }
1 while (ope.Peek() != '#') 2 { 3 strNew += " " + ope.Peek(); 4 ope.Pop(); 5 }
修改后测试通过:
2. 计算逆波兰式改错
计算结果与预期得到的值不同。
发现是因为减法和除法,左右值的赋值顺序错误。
1 //减法 2 case '-': 3 left = result.Peek(); 4 result.Pop(); 5 right = result.Peek(); 6 result.Pop(); 7 answer =right - left; 8 i++; 9 break; 10 11 12 //除法 13 case '/': 14 left = result.Peek(); 15 result.Pop(); 16 right = result.Peek(); 17 result.Pop(); 18 answer = right / left; 19 i++; 20 break;
(二)最后一次测试,全部通过:
三、总结、心得
通过这次作业,学会了如何进行单元测试,保证自己的程序可以实现老师要求的基本功能。同时也发现了单元测试的重要性。同时也在这个作业快结束的时候,慢慢感受到一点TDD测试驱动开发的意思。先设计针对每个功能的测试用例,先考虑代码的使用需求。然后通过运行这些测试用例是否通过,来找到自己代码中存在的问题,没有实现或是实现有误的部分。