单元测试

结对人:高远博

一:测试用例文档git地址:https://git.coding.net/Rainbows/ruanjiangongcheng.git

对于单元测试,以前并没有接触过,之前觉得只要把程序编好,再运行出来就可以了。但是经过这次作业,使我们懂得了单元测试的必要性。单元测试是在软件开发过程中要进行的最低级别的测试活动,在单元测试活动中,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。 单元测试不仅仅是作为无错编码一种辅助手段在一次性的开发过程中使用,单元测试必须是可重复的,无论是在软件修改,或是移植到新的运行环境的过程中。因此,所有的测试都必须在整个软件系统的生命周期中进行维护。我们一共进行了如下8个测试:

开始时其中一个测试没有通过,我和高远博同学经过反复检查,更改了测试代码,最终全部通过。

 

1.

[Test]
        public void TestRandNumber()
        {
            int i=t.RandNumber();
            if (i > 0 & i < 14)
                Assert.Pass();
            else
                Assert.Fail();
        }

因为四则运算中的数字我们不想要过大的数字,所以我们程序中设计的是1-13的正整数。以上测试代码测试的是我们产生的随机数是否为1-13的正整数,测试通过。

2.

[Test]
        public void TestLD()
        {
            int t1 = t.LegalDivider();
            while ((t1 / 2) * 2 == t1)
                t1 /= 2;
            while ((t1 / 5) * 5 == t1)
                t1 /= 5;
            Assert.AreEqual(1, t1);
        }

由于我们不希望四则运算相除后产生无限小数,所以我们设计了只能使除数被2的n次方和5的n次方整除。以上测试代码测试了除数是否只能被2和5整除,测试通过。

3.

[Test]
        public void TestGetSymbol()
        { string op = "+-*/";
            string te = t.RandSymbol().ToString();
            Assert.GreaterOrEqual(op.LastIndexOf(te), 0);
        }

由于我们要做的是含有加减乘除的四则运算。以上代码测试了输入的运算符是否为加减乘除,测试通过。

4.

[Test]
        public  void TestCalculate1()
        {
            Test t1 = new Test();
            string ToEval1_ = "1+1";
            if (Math.Abs(2- t1.Calucate(ToEval1_)) < 1e-7)
                Assert.Pass();
            else
                Assert.Fail();
        }

由于我们需要测试我们所涉及的代码是否能成功的准确计算答案,所以我们先计算一个简单的表达式1+1是否等于2。测试通过。

5.

[Test]
        public void TestCalculate()
        {
            string ToEval_ = "(1+2)*(3+5)";
            if (Math.Abs(24 - t.Calucate(ToEval_)) < 1e-7)
                Assert.Pass();
            else
                Assert.Fail();
        }

由于我们需要测试我们所涉及的代码是否能成功的准确计算答案,所以我们采用以上测试代码测试(1+2)*(3+5)的答案是否为24。测试通过。

6.

 public void TestCalculate2()
        {
            Test t2 = new Test();
            string ToEval2 = "(5-3)*3+7";
            if (Math.Abs(13- t2.Calucate(ToEval2)) < 1e-7)
                Assert.Pass();
            else
                Assert.Fail();
        }

然后我们变换运算式子的形式继续测试,却发现测试不通过,细思原因代码中calculate方法里有个try catch,如果try失败就抛出异常,try的代码块里调用了preordertopostorder

preordertopostorder里用到了优先级,如果它是空的 会报错,初始化之后就不会了。

。我们又重新编写了如下测试代码:

 public void TestCalculate2()
        {
            Test t2 = new Test();
            t2.opinit();
            string ToEval2 = "(5-3)*3+7";
            if (Math.Abs(13- t2.Calucate(ToEval2)) < 1e-7)
                Assert.Pass();
            else
                Assert.Fail();
        }

结果测试顺利通过。

7.

[Test]
        public void TestGetExp()
        {
            t.opinit();
            t.GetExp();
            t.Calucate(t.ToEval);
            Assert.Pass();
        }

由于之前我们测试了我们的代码能够成功的计算四则运算,所以本次测试不抛出异常就是成功的生成了一个表达式。

8.

[Test]
        public void TestGetBracketExp()=
        {
            t.opinit();
            t.GetBracketExp();
            t.Calucate(t.ToEval);
            Assert.Pass();
        }

由于我们要生成带括号的运算式,所以我们用以上代码测试是否能够成功生成,因为之前测试成功了t.calculate方法,所以本次测试不抛出异常就是成功的生成了一个带有括号的表达式。测试通过。

posted on 2017-10-11 10:23  图子会变成好的程序员  阅读(253)  评论(0编辑  收藏  举报

导航