zoukankan      html  css  js  c++  java
  • 第四周——单元测试

    结对同学:吴雨丹

    单元测试:

      1、使用Visual Studio中的Nunit框架进行单元测试

      2、各个主要功能的单元测试如下:

      (1)由于四则运算中的数字和运算符是随机产生或选取的,所以理论上会出现分母位置为0的情况,所以针对这种情况我们设置了分母位置为0的一个测试用例,即:“1+2/0+4”,单元测试错误情况如下:

      但由于我们在编写theFinal()函数产生四则运算式时进行相关的判断设置:若分母为0,则除法结果为无穷大,当计算结果为无穷大时舍弃生成的四则运算式,重新生成新的运算式,所以不会出现此种情况,我们将此测试用例去除。

      部分代码如下:

            /// <summary>
            /// 产生最终的数字表达式
            /// </summary>
            /// <returns></returns>
            public string TheFinal()
            {
                string final = RandomQuestion();
                char[] question = GetV(final);
                this.GetStack(question);
                while (IsDivision(numStack) == false || NumStack.Peek().ToString() == "")
                {
                    numStack.Pop();
                    final = RandomQuestion();
                    this.GetStack(final.ToArray());
                }
                return final;
            }

      (2)针对GetStack(char[] stackArr)函数中的num变量,我们在初次编码时将其数据类型设为int,但在进行单元测试时发现测试用例无法测试通过,随后发现自己忘记了结果为小数的这一情况,所以将运算结果类型改为double,使其能够实现结果为小数的情况,测试成功。

     

      

      (3)我们还对产生随机数的RandomQuestion()函数进行了单元测试,在测试之前我们以为这一部分没有问题,但在实际单元测试中进行单元测试时出现错误,单元测试失败,在仔细检查了代码之后,发现是由于没有删除Assert.Fail()函数,将其删除后,单元测试通过。

      (4)我们在首次测试isDivision()函数时就成功通过测试。代码如下:

            /// <summary>
            /// 判断是否整除
            /// </summary>
            /// <param name="numStack"></param>
            /// <returns></returns>
            public Boolean IsDivision(Stack numStack)
            {
                Boolean flag = true;
                string miniorString = NumStack.Peek().ToString();
                int length = miniorString.Length - miniorString.IndexOf(".") - 1;
                if (length > 10)
                {
                    flag = false;
                }
                return flag;
            }

      3、单元测试体会

      在编写测试用例的时候,我们编写了一些可能出现的错误情况来对自己的程序进行单元测试。在测试的过程中感受最大的一点就是,单元测试越早越好。测试的越早我们才能更早的发现自己代码的错误和漏洞,及时修改,以免等到所有代码编写完毕后编译运行出很多问题,这些问题可能是疏忽造成的或者出现位置靠前的代码产生的,并且这些代码对后面的代码存在一定的影响。所以尽早的进行单元测试,有利于减少解决bug的时间和提高代码的正确率。我之前看过一个类比,当我们要清洗一台装配好的水果加工机的时候,我们有两种方法,一种是用大量的水和清洁剂进行清洗,另一种是将机器拆开再清洗。第一种方法无论你用了多少水和清洁剂,一些水果的残渣还是会粘在机器的死角里,任由它随着时间而腐烂发霉。第二种方法虽然开始的时候你会花一些时间拆卸机器,但是当你把机器拆开后原本存在的死角就不存在或者容易接触到,你可以毫不费力的将这些零部件清洗干净。我觉得单元测试就是将“机器”的“死角”暴露出来,我们将每个“零件”都“清洗干净”。

      4、HTTPS地址https://git.coding.net/jyj5951/f4.git

  • 相关阅读:
    A. Vanya and Table
    B. Chris and Magic Square
    A. Bus to Udayland
    关于cout输出精度问题
    1087 1 10 100 1000
    1080 两个数的平方和
    CODE[VS] 1842 递归第一次
    CODE[VS] 1501 二叉树最大宽度和高度
    少年中国说
    CODE[VS] 1475 m进制转十进制
  • 原文地址:https://www.cnblogs.com/jyj5951/p/7648161.html
Copyright © 2011-2022 走看看