下面通过一个简单的例子来讲解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#,VB,C++)
创建完单元测试代码后,可以看到此时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、 输入的参数在范围内,由于逻辑运算错误,输出的结果不是预期值,系统出错。
…..