zoukankan      html  css  js  c++  java
  • 第三次作业——单元测试

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

    第五次测试:

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


    心得:

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

  • 相关阅读:
    每日一题 为了工作 2020 0412 第四十一题
    每日一题 为了工作 2020 04011 第四十题
    每日一题 为了工作 2020 0410 第三十九题
    每日一题 为了工作 2020 0409 第三十八题
    每日一题 为了工作 2020 0408 第三十七题
    每日一题 为了工作 2020 0407 第三十六题
    每日一题 为了工作 2020 0406 第三十五题
    每日一题 为了工作 2020 0405 第三十四题
    学习总结(二十四)
    学习总结(二十三)
  • 原文地址:https://www.cnblogs.com/qjy0330/p/9749183.html
Copyright © 2011-2022 走看看