第四周——单元测试
Posted 6_Asuna
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第四周——单元测试相关的知识,希望对你有一定的参考价值。
结对同学:吴雨丹
单元测试:
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的时间和提高代码的正确率。我之前看过一个类比,当我们要清洗一台装配好的水果加工机的时候,我们有两种方法,一种是用大量的水和清洁剂进行清洗,另一种是将机器拆开再清洗。第一种方法无论你用了多少水和清洁剂,一些水果的残渣还是会粘在机器的死角里,任由它随着时间而腐烂发霉。第二种方法虽然开始的时候你会花一些时间拆卸机器,但是当你把机器拆开后原本存在的死角就不存在或者容易接触到,你可以毫不费力的将这些零部件清洗干净。我觉得单元测试就是将“机器”的“死角”暴露出来,我们将每个“零件”都“清洗干净”。
以上是关于第四周——单元测试的主要内容,如果未能解决你的问题,请参考以下文章