导航

Visual Studio 2008单元测试(1)_开篇

Posted on 2011-01-21 19:07  MyNet  阅读(3692)  评论(8编辑  收藏  举报

 

   说到单元测试,引用《单元测试之道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里面创建单元测试代码其实很简单,在类名单击鼠标右键,点击“创建单元测试”菜单即可,如下图所示:
       然后弹出“创建单元测试”的对话框,可选择当前程序集中的类的函数创建单元测试项目,默认选择当前类,如下图所示: 
       点击“确定”,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可以很方便执行测试代码,可点击“运行上下文中的测试”按钮进行测试,如下图: 
       执行完后,可在“测试结果”窗口查看我们的单元测试结果,如下图所示:
       从结果可知,测试结果不能过,可通过查看错误信息帮助我们找出错误原因,原来" 111111111  "字符串前后都存在空格,字符串的长度大于10,我们判断长度时应该去除掉前后的空格,将代码改造如下:
//通过合同GUID获取合同名称
        public string GetContractNameByGUID (string strContractGUID)
        {
            if (strContractGUID.Trim().Length > 10)
            {
                return "10";
            }
            else
            {
                return "8";
            }
        }
       重新执行测试代码,结果如下: 
       测试通过,代码没有问题。
       本篇简单介绍了Visual2008最简单的单元测试功能,下期将介绍如何利用Visual2008进行Web页面的测试