说到单元测试,引用《单元测试之道C#版》里面的一段话:
单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。例如,你可能把一个很大的值放入一个有序list
中去,然后确认该值出现在list 的尾部。或者,你可能会从字符串中删除匹配某种模式的字符,然后确认字符串确实不再包含这些字符了。
执行单元测试,是为了证明某段代码的行为确实和开发者所期望的一致。
其实进行单元测试很简单,下面本人介绍Visual Studio 2008自带的单元测试功能:
第一步:首先建立一个C#类库项目,其中增加一个Contract类,此类有一个GetContractNameByGUID方法,具体代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Business
{
public class Contract
{
private string _ContractName;
public string ContractName
{
get
{
return _ContractName;
}
set
{
_ContractName = value;
}
}
public Contract()
{
}
public Contract(string contractName)
{
this._ContractName = contractName;
}
//通过合同GUID获取合同名称
public string GetContractNameByGUID (string
strContractGUID)
{
if (strContractGUID.Length > 10)
{
return "10";
}
else
{
return "8";
}
}
}
}
|
第二步:创建单元测试代码
在Visual 2008里面创建单元测试代码其实很简单,在类名单击鼠标右键,点击“创建单元测试”菜单即可,如下图所示:
![](https://pic002.cnblogs.com/images/2011/169768/2011012412100691.jpg)
![](https://pic002.cnblogs.com/images/2011/169768/2011012412100691.jpg)
然后弹出“创建单元测试”的对话框,可选择当前程序集中的类的函数创建单元测试项目,默认选择当前类,如下图所示:
![](https://pic002.cnblogs.com/images/2011/169768/2011012412101159.jpg)
点击“确定”,Viual
2008会自动生成ContractTest类,包括GetContractNameByGUIDTest函数供测试GetContractNameByGUID,如下图所示:
///
///GetContractNameByGUID 的测试
///
[TestMethod()]
public void GetContractNameByGUIDTest()
{
Contract target = new Contract(); // TODO:
初始化为适当的值
string strContractGUID =
string.Empty; // TODO: 初始化为适当的值
string expected =
string.Empty; // TODO: 初始化为适当的值
string actual;
actual =
target.GetContractNameByGUID(strContractGUID);
Assert.AreEqual(expected,
actual);
Assert.Inconclusive("验证此测试方法的正确性。");
}
|
其中,strContractGUID为GetContractNameByGUID函数的输入参数,默认值为string.Empty,expected变更为预计输出值,默认值也为string.Empty,需要我们进行个性化设置。Assert.AreEqual为验证指定的值是否相等的函数,如果不相等则认为失败,就是通过此方法来测试函数的输入与我们的预计输出是否相等,Assert.Inconclusive代码为输出结果时显示的内容,我们不需要显示,只需要显示错误信息即可,因此需要删除掉此行代码。我们将自动生成的代码改造如下:
///
///GetContractNameByGUID 的测试
///
[TestMethod()]
public void GetContractNameByGUIDTest()
{
Contract target = new Contract(); // TODO:
初始化为适当的值
string strContractGUID = "
111111111 "; // TODO: 初始化为适当的值
string expected = "8"; // TODO:
初始化为适当的值
string actual;
actual =
target.GetContractNameByGUID(strContractGUID);
Assert.AreEqual(expected, actual);
}
|
第三步:执行测试代码
在Visual 2008可以很方便执行测试代码,可点击“运行上下文中的测试”按钮进行测试,如下图:
![](https://pic002.cnblogs.com/images/2011/169768/2011012412101866.jpg)
执行完后,可在“测试结果”窗口查看我们的单元测试结果,如下图所示:
![](https://pic002.cnblogs.com/images/2011/169768/2011012412102495.jpg)
![](https://pic002.cnblogs.com/images/2011/169768/2011012412102495.jpg)
从结果可知,测试结果不能过,可通过查看错误信息帮助我们找出错误原因,原来" 111111111
"字符串前后都存在空格,字符串的长度大于10,我们判断长度时应该去除掉前后的空格,将代码改造如下:
//通过合同GUID获取合同名称
public string GetContractNameByGUID (string
strContractGUID)
{
if (strContractGUID.Trim().Length > 10)
{
return "10";
}
else
{
return "8";
}
}
|
重新执行测试代码,结果如下:
![](https://pic002.cnblogs.com/images/2011/169768/2011012412103081.jpg)
测试通过,代码没有问题。
本篇简单介绍了Visual2008最简单的单元测试功能,下期将介绍如何利用Visual2008进行Web页面的测试。