当前位置:首页 > 网络编程 > 软件语言 > .NET > 用Vs2005的单元测试框架实现一个计算器

用Vs2005的单元测试框架实现一个计算器

点击次数:47 次 发布日期:2008-11-06 07:53:00 作者:源代码网
源代码网推荐
广告载入中
在VS2005中微软加入了unit test的一个框架。最近有点时间就利用这个工具自己写了一个模仿Windows自带计算器的小程序:
虽然程序看起来简单,但是要做到和Windows自带的行为一样却并没有看上去的简单:不同的按钮,不同的顺序能够组合出很多用例。如果每添加一个新功能就要手动的去试有没有影响原来的功能,工作量不仅大而且容易出错。而用了VS2005的单元测试框架,我们就不必每次自己测试有没有regress了。
首先,我们当然要建一个WinForm工程,然后拉些控件改改属性。为了能进行单元测试,我们要把逻辑和计算从UI分开,放到一个单独的类里,而不是写在这个Form里。在我的例子里,我单独做了一个Calculator类。这个类有一些public的方法,每个函数对应一个button,每当用户按一个button,就会去调用相应的方法(我把所有数字键和小数点的方法合成一个了,这样接口可以简单些),下面是这个类的代码片断:
    public class Calculator
    {
        public string Proceed(char inputChar)//input digital or dot
        {...}

        public string DoEqual() //press "=" button
        {...}
        public string DoMultiply() //press "/" button
        {...}
        ....
    }
类的框架写好之后,下面就要建立单元测试工程:New project,然后选择Test project:
然后在新建的测试工程上单击右键,选择Add->Unit test。在弹出的对话框里选择Calculator类:
 
点击OK之后系统就会替我们创建测试用例的方法。不过系统创建的不大符合我们的要求,下面是我自己改过的一个用例:
        [TestMethod()]
        public void ProceedTest9()
        {
            string expected = "12";
            string actual;
            actual = InputString("4+4+4+");
            Assert.AreEqual(expected, actual, "SimpleCalculator.Calculator.Proceed did not return the expected value.");
        }
InputString("4+4+4+"); 这行代码就代表用户依次在计算器上按了4+4+4+按钮。expected表示期望的结果。actual表示实际运行的结果。
Assert.AreEqual的用法大家可以看看MSDN。Assert类里还有很多类似于AreEqual的方法,大家可以查查。InputString方法的片断:
        private string InputString(string input)

        {
            string ret = null;
            for (int i = 0; i < input.Length; i++)
            {
                switch (input[i])
                {
                    case "+":
                        ret = mCalculator.DoPlus();
                        break;
                    case "-": 软件开发网 www.mscto.com
                        ret = mCalculator.DoMinus();
                        break;
                    case "*":
                        ret = mCalculator.DoMultiply();
                        break;
                    case "/":
                        ret = mCalculator.DoDivide();
                        break;
                    case "=":
                        ret = mCalculator.DoEqual();
                        break;
                    .....
                    default:
                        ret = mCalculator.Proceed(input[i]);
                        break;
                }
            }
            return ret;
        }
然后将测试工程设置为起始工程,点击运行按钮:
我写的Calculator类通过了全部61个测试用例,如果某个测试没有通过,VS2005会做出提示。此外,还可以在测试用例里直接进行debug:可以设置断点等等。利用这个工具,我们可以方便地进行单元测试。

源代码网推荐

源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华