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