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;
    

    第五次测试:

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


    心得:

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

  • 相关阅读:
    高效 Java Web 开发框架 JessMA v3.2.3 正式发布
    跨平台日志清理工具 Log-Cutter v2.0.1 RC-1 发布
    跨平台日志清理工具 Log-Cutter v1.0.3 正式发布
    高性能 Windows Socket 组件 HP-Socket v2.2.3 正式发布
    7. Oracle数据加载和卸载
    6. Oracle闪回特性
    5. RAMN备份与恢复
    4. Oracle数据库用户管理备份与恢复
    3. Oracle数据库逻辑备份与恢复
    后台系统依据路由生成tabs标签页
  • 原文地址:https://www.cnblogs.com/qjy0330/p/9749183.html
Copyright © 2011-2022 走看看