[导入]数据驱动的单元测试

我们还是通过应用场景来理解这种 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
[email protected]
[email protected]
[email protected]
[email protected]

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

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"] 就可以获得需要测试的每行数据了。

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

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

参考资料:
演练:使用 Visual Studio Team Test 进行单元测试
http://www.microsoft.com/china/msdn/library/langtool/vsts/vstsunittesting.mspx

Visual Studio Team System   数据驱动的单元测试
http://msdn2.microsoft.com/zh-cn/library/ms182519.aspx

Visual Studio Team System   演练:使用配置文件定义数据源  
http://msdn2.microsoft.com/zh-cn/library/ms243192.aspx


文章来源: http://blog.joycode.com/ghj/archive/2006/02/11/71351.aspx

转载于:https://www.cnblogs.com/gkit/archive/2006/02/24/336805.html

你可能感兴趣的:(测试,数据库)