用Visual studio2005的单元测试框架实现一个简单的计算器

原创 2006年05月17日 22:42: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 '-':
                        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:可以设置断点等等。

利用这个工具,我们可以方便地进行单元测试。当然这里只是介绍了一些基本用法,还有其他很多相对高端的应用。大家有兴趣可以慢慢研究。

JavaBean编写一个计算器

Java: Jsp:
  • WangMan_512
  • WangMan_512
  • 2011年11月07日 21:19
  • 1011

用javascript实现简单计算器

这是一个简单计算器的实现。可以实现简单的加,减,乘,除功能,用户按下“←”按钮,删除当前算术表达式最后一个字符,并更新显示,用户按下“CE”按钮,清除当前算术表达式,如果算术表达式非法,弹出警告框提醒...
  • XHF901
  • XHF901
  • 2016年12月09日 15:49
  • 365

JSP练习之简单计算器(使用jsp+javabean模式)

JSP案例之实现一个功能简单的计算器小程序
  • qq791967024
  • qq791967024
  • 2015年01月28日 17:57
  • 2281

JSP+JavaBean编写一个计算器

Java: Jsp:
  • like7xiaoben
  • like7xiaoben
  • 2011年11月06日 16:41
  • 1702

使用 VFP ( Microsoft Visual FoxPro ) 设计一个简易计算器(上)

没有接触过VFP,因为公司项目需要VFP实现修改位图DPI,所以过来摸索一下VFP怎么用。       百度查VFP,百度百科的名词解释是:http://baike.baidu.com/view/5...
  • wangwenjing90
  • wangwenjing90
  • 2013年04月19日 15:54
  • 15055

JSP+JavaBean实现简单计算器

实验5 JavaBean创建和使用 一、实验目的 1、掌握JavaBean创建和使用方法; 2、领会JavaBean简化页面设计的优势等。 二、实验内容 1、设计诸如以下页面的简单计算器 ...
  • Coder__CS
  • Coder__CS
  • 2017年04月19日 23:31
  • 771

用NetBeans编写计算器

NetBeans是开源软件开发集成环境,是一个开放框架,可扩展的开发平台,可以用于Java,C/C++,PHP等语言的开发,本身是一个开发平台,可以通过扩展插件来扩展功能。(摘自好搜百科)...
  • sunshinesky2
  • sunshinesky2
  • 2015年09月19日 11:05
  • 1467

PHP自动测试框架Top 10

转载自:http://www.evget.com/article/2016/1/4/23321.html 概述:自动化测试可以极大的缓解并改善PHP开发的工作流程,它能帮助开发人员管理大部分任务...
  • u012377333
  • u012377333
  • 2016年01月05日 09:38
  • 1022

自己编写的一个简单的计算器

1,在android中使用GridLayout布局来编写计算器,首先了解一下GridLayout网格布局。 GridLayout网格布局   android4.0(API在14及其以上)以...
  • zhangvalue
  • zhangvalue
  • 2015年10月22日 12:13
  • 6429

用python写的一个简单的计算器

用Python完成的一个简单的计算器,能算简单的+,-,×,/运算,暂不支持键盘输入,以后会慢慢加些附加的功能,让它变得强大些from Tkinter import *def frame(root,s...
  • qqyyhh
  • qqyyhh
  • 2007年04月12日 18:43
  • 2687
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用Visual studio2005的单元测试框架实现一个简单的计算器
举报原因:
原因补充:

(最多只允许输入30个字)