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;
    

    第五次测试:

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


    心得:

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

  • 相关阅读:
    uva 10561 sg定理
    二进制下 求分数化小数的循环节问题
    zoj 2562 反素数
    uva 11916 解模方程a^x=b (mod n)
    Android 组件化方案探索与思考
    2018谷歌I/O开发者大会8大看点汇总 新品有哪些
    Glide高级详解—缓存与解码复用
    Android性能优化:手把手带你全面实现内存优化
    Android几种强大的下拉刷新库
    Android app 在线更新那点事儿(适配Android6.0、7.0、8.0)
  • 原文地址:https://www.cnblogs.com/qjy0330/p/9749183.html
Copyright © 2011-2022 走看看