20180925-4 单元测试,结对

此作业要求参见: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测试驱动开发的意思。先设计针对每个功能的测试用例,先考虑代码的使用需求。然后通过运行这些测试用例是否通过,来找到自己代码中存在的问题,没有实现或是实现有误的部分。

posted @ 2018-10-07 19:03  吴奕瑶  Views(159)  Comments(0Edit  收藏  举报