首页 > 技术文章 > 第三次作业——单元测试

qjy0330 原文

此作业要求参见:[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

要求1:对每个功能,先给出测试用例,然后再编码功能。请注意把测试用例视为功能需求完成的检验指标。

测试用例1:测试所生成的试题是否是字符串

调用生成试题函数,判断返回结果类型。



 

测试用例2:测试生成逆波兰式

1、无括号生成逆波兰式

(1)测试同级运算符生成逆波兰式

输入字符串:“19-4-2-8=”

期望输出结果:“19 4 -  2 - 8 - ”

  



测试用例3:测试生成逆波兰式

1、无括号生成逆波兰式

(2)测试混合运算生成逆波兰式

输入字符串:“5*6+7/9=”

期望输出结果:“5 6 * 7 9 / +”



 

测试用例4:测试生成逆波兰式

2、有括号生成逆波兰式

(1)单括号同级运算符生成逆波兰式

输入字符串:“1-2-(3-4)=”

期望输出结果:“1 2 - 3 4 - -”



测试用例5:测试生成逆波兰式

2、有括号生成逆波兰式

(2)单括号混合运算符生成逆波兰式

输入字符串:“(1+2)*3-4=”

期望输出结果:“1 2 + 3 * 4 -”



测试用例6:测试生成逆波兰式

2、有括号生成逆波兰式

(3)双括号混合运算生成逆波兰式

输入字符串:“1+((2-3)/4)=”

期望输出结果:“1 2 3 - 4 / +”



测试用例7:测试逆波兰式地计算

1、简单四则运算

(1)加法测试

输入字符串:“1 2 +”

期望输出结果:3



测试用例8:测试逆波兰式地计算

1、简单四则运算

(2)减法测试

输入字符串:“4 5 -”

期望输出结果:-1



测试用例9:测试逆波兰式地计算

1、简单四则运算

(3)乘法测试

输入字符串:“2 3 *”

期望输出结果:6



测试用例10:测试逆波兰式地计算

1、简单四则运算

(4)除法测试

输入字符串:“12 6 /”

期望输出结果:2



测试用例11:测试逆波兰式地计算

2、长逆波兰式运算

(1)同级运算符长逆波兰式计算

输入字符串:“19 14 - 12 - 18 -”

期望输出结果:-25



测试用例12:测试逆波兰式地计算

2、长逆波兰式运算

(1)混合运算符长逆波兰式计算

输入字符串:“1 2 3 - 4 / +”

期望输出结果:0.75



 要求2:在博客报告测试用例全部fail 到 全部pass 的过程,报告事实 (fail到修改代码或者测试用例,到pass) 以及收获。

第一次测试:


fail1:测试生成逆波兰式(测试用例2:TestCreateRPN1),错误重现如下:

 其中数字19之间插入了一个空格,末尾两个减号之间未插入空格,找到相应的代码片段如下:

        int flag = 1;

...

                switch (strOld[i])
                {
                    case '+':
                    case '-':
                    case '*':
                    case '/':

...

                        ope.Push(strOld[i]);
                        flag = 1;

...

                    default:
                        num.Push(strOld[i]);
                        if ((flag == 1) && (i != 0))
                        {
                            strNew += " ";
                            flag = 0;
                        }
                        strNew += strOld[i];
                        break;
                }

 其中变量flag是识别读取到的字符是否为运算符,而后在运算符左右添加空格。参照测试结果发现逻辑有错误,然后将flag初值置为0。修改代码之后再次测试。 

 

第二次测试:

测试之后发现数字19已经可以以正确的格式输出,但是末尾的“8-”的格式还是不正确。找到相应的代码片段:

            while (ope.Peek() != '#')
            {
                strNew += ope.Peek() + " ";
                ope.Pop();
            }

发现在出栈时,空格添加的位置错误,修改成如下代码再次进行测试:

            while (ope.Peek() != '#')
            {
                strNew += " " + ope.Peek();
                ope.Pop();
            }

  

第三次测试:

至此,生成逆波兰式功能正确运行。


 fail2:逆波兰式计算(测试用例8:TestCal2),错误重现如下:

发现减法结果计算错误,找到相应的代码片段如下:

case '-':
    left = result.Peek();
    result.Pop();
    right = result.Peek();
    result.Pop();
    answer = left - right;
    i++;
    break;

发现运算逻辑错误,应该用先弹出栈的数字作为被减数,修改成如下代码后再进行测试:

case '-':
    left = result.Peek();
    result.Pop();
    right = result.Peek();
    result.Pop();
    answer =right - left;
    i++;
    break;

  

第四次测试:

至此,减法运算能得到正确结果。


 fail2:逆波兰式计算(测试用例10:TestCal4),错误重现如下:

发现除法计算结果有错误,找到相应代码为:

case '/':
    left = result.Peek();
    result.Pop();
    right = result.Peek();
    result.Pop();
    answer = left / right;
    i++;
    break;

发现运算逻辑错误,应该用先弹出栈的数字作为被除数,修改成如下代码后再进行测试:

case '/':
    left = result.Peek();
    result.Pop();
    right = result.Peek();
    result.Pop();
    answer = right / left;
    i++;
    break;

第五次测试:

至此测试用例全部通过。程序可以实现生成字符串类型的试题、生成正确的逆波兰式、正确计算逆波兰式的功能。


心得:

通过单元测试地检验才能清晰地看出自己程序的不足之处。在编写测试用例时,通过两个人地讨论,对整个程序运行过程中的可能出现的情况进行猜测,有助于更好地完成程序的功能。也希望在未来的一周,身边的同学可以多多发现我们程序中的不足,从而进一步完善我们的程序。

推荐阅读