测试生活

本Blog将不在更新,转入如下地址 http://123.127.140.50/ztest/default.aspx

导航

使用VS2005进行单元测试

Posted on 2007-11-03 17:54  张天利  阅读(1955)  评论(2编辑  收藏  举报

 

下面通过一个简单的例子来讲解VS2005是如何做单元测试的(此处的单元测试目的是为了发现程序逻辑上的错误,测试的最小单元是:XX方法)。
1
、编写一个加法程序,其中编写一个加法方法,然后调用该方法。

程序代码如下:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

namespace WindowsApplication1

{

   public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        public int Add(int a,int b)    //构建ADD方法

        {

            return a +b ;

        }

        private void button1_Click(object sender, EventArgs e)

        {

            int temp = 0;

            temp=Add(Convert.ToInt32(textBox1.Text), Convert.ToInt32(textBox2.Text));//调用ADD方法

            textBox3.Text = temp.ToString();

        }

        private void label2_Click(object sender, EventArgs e)

        {

        }

        private void label3_Click(object sender, EventArgs e)

        {

        }

    }

}程序运行截图如下:


2、测试ADD方法。

   VS2005,将光标移动到ADD方法处,单击鼠标右键并点击“创建单元测试“,如下图(在此界面中可以选择单元测试的代码为哪种语言:C#VBC++


创建完单元测试代码后,可以看到此时
VS2005自动为ADD方法创建的单元测试代码原码如下

///<summary>

        ///Add (int, int) 的测试

        ///</summary>

        [TestMethod()]

        public void AddTest()

        {

            Form1 target = new Form1();

            int a = 0; // TODO: 初始化为适当的值

            int b = 0; // TODO: 初始化为适当的值

            int expected = 0;

            int actual;

            actual = target.Add(a, b);

            Assert.AreEqual(expected, actual, "WindowsApplication1.Form1.Add 未返回所需的值。")

            Assert.Inconclusive("验证此测试方法的正确性。");

        }

}

在上面的代码中,根据系统提示,应对参数a,b进行初始化,假设a=30,b=15;将原始代码稍做修改为下:

 ///<summary>

        ///Add (int, int) 的测试

        ///</summary>

        [TestMethod()]

        public void AddTest()

        {

            Form1 target = new Form1();

            int a = 30; // TODO: 初始化为适当的值

            int b = 15; // TODO: 初始化为适当的值

            int expected = 45; //预期结果应该为:30+15=45

            int actual;

            actual = target.Add(a, b);

            Assert.AreEqual(expected, actual);//预期结果与真实结果进行对比,如果相同则测试通过,否则失败

           // Assert.Inconclusive("验证此测试方法的正确性。");注释该行

        }

}

此时运行该测试代码。(可以分别从测试管理器,和工具条上运行)


    通过运行该段代码可以看到运行结果为:通过。


    此时如果将ADD方法中的a+b改为a-b;然后重新运行一遍更改后的代码和该段测试代码,此时的测试结果为:失败(查看错误信息可以看到预期为45,而实际为15)。


    如果想要查看详细信息,双击测试结果,将会得到详细信息
    

结论:

  通过VS2005的单元测试,程序员只需要在单元测试代码中将参数和预期结果实例化,然后运行就可以看到自己编写的代码在逻辑上有没有问题!同样,如果想让单元测试发现更多的问题,则必须对测试用例进行详细的设计,比如设计一个如下简单的测试用例:

测试参数a

测试参数b

预期结果

实际结果

-10

11

1

-32768

32767

-1

32767

1

32768

-32769

2

32767

.

通过以上用例可以发现当:

1、 输入的参数本身超出范围时,系统出错。

2、 输入的参数在范围内,但通过加法运算后,输出结果的参数不在范围内,系统出错。

3、 输入的参数在范围内,由于逻辑运算错误,输出的结果不是预期值,系统出错。

..