第四周——单元测试

结对同学:吴雨丹

单元测试:

  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

原文地址:https://www.cnblogs.com/jyj5951/p/7648161.html