在VS2005中单元测试方法

本文介绍如何利用VS2005的数据驱动单元测试功能,通过外部数据源如Excel文件进行邮件地址格式验证的方法,提高了测试效率。

我们还是通过应用场景来理解这种 VS 2005 的单元测试方法。

先说需求:
比如我们有一个验证邮件格式是否正确的公共方法,
类似下面代码,这里简单只用正则表达式
namespace ClassLibrary1{
    public class EmailValidateClass    {
        public static bool ValidateEmail(string mail)        {
            System.Text.RegularExpressions.Regex r =
                new System.Text.RegularExpressions.Regex(@"/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*");
            System.Text.RegularExpressions.Match m = r.Match(mail);
            return m.Success;
        }
    }
}

我们现在要测试这个方法。
我们手头有一大批的邮件地址,这些邮件地址是应该可以通过验证的,
另外一大批邮件地址,这些是不可以通过的。

我们采用普通的方式的话,每增加一个可通过或者不可通过的,我们都需要修改测试代码。
或者我们把这些信息记录到一个文件,然后测试程序里面手工打开这个文件,依次读取测试。
其实 VS 2005 给我们想到了这点问题,专门给我们提供一种叫 数据驱动的单元测试 方法。
下面就来说如何使用 数据驱动的单元测试 来实现这个功能。

环境准备
假设我们有一个可以通过验证的邮件列表,我们把这个列表保存到一个 Excel 文件
注意:默认ADO读取 Excel 文件,第一行,他认为是列名。
我们在第一行第一列,给它设置一个列名  Val1
然后从第二行开始,每一列,都是要测试的数据,类似下面的方式:
Val1
ghj@gmail.com This e-mail address is being protected from spam bots, you need JavaScript enabled to view it
aaa@cc.dd This e-mail address is being protected from spam bots, you need JavaScript enabled to view it
bbs_w@dd.net This e-mail address is being protected from spam bots, you need JavaScript enabled to view it
wwww@hotmail.com This e-mail address is being protected from spam bots, you need JavaScript enabled to view it

然后就是我们的测试代码了,如下:

using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace TestProject1
{
    [TestClass()]
    public class EmailValidateClassTest
    {
        private TestContext testContextInstance;

        public TestContext TestContext
        {
            get
            {
                return testContextInstance;
            }
            set
            {
                testContextInstance = value;
            }
        }
        [TestMethod()]
        [DeploymentItem("EmailData//EmailData.xls")]
        [DataSource("System.Data.Odbc",
            "Dsn=Excel Files;dbq=D://My2005Codes//TestCode//TestTest//TestProject1//EmailData//EmailData.xls;defaultdir=.; driverid=790;maxbuffersize=2048;pagetimeout=5",
            "Sheet1$",
            DataAccessMethod.Sequential)]
        public void ValidateEmailTest2()
        {
            if (TestContext.DataRow["Val1"] == null) return;
            string mail = TestContext.DataRow[0].ToString();
            bool tmp = ClassLibrary1.EmailValidateClass.ValidateEmail(mail);
            Assert.IsTrue(tmp);
            TestContext.WriteLine(mail);
           
        }
}

我们只要在测试方法的属性中,指定了访问 Excel 的方式,以及位置,然后我们在测试方法中,只要简单的通过 TestContext.DataRow["Val1"] 就可以获得需要测试的每行数据了。

其他的代码跟正常测试一样,就跳过。

当然这些测试数据,也可以保存在其他数据库,或者文本文件中。
只需要定义数据源访问的方式,就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值