将Excel文件名命名跟测试用例的类型名相同,是因为方便维护测试代码的时候快速找到对应的测试数据文件。另外,一般也不会把测试数据和测试代码放在同一个文件夹。在VSTT的测试工程文件里,有一个后缀名为.testrunconfig的文件,这个文件用来设置一些测试环境,在“解决方案浏览器(Solution Explorer)”里双击这个文件会打开测试环境配置对话框。左边列表框的第四项“部署(Deployment)”,允许你在测试用例执行之前, 指引VSTT将你指定文件夹里面的所有文件都拷贝到测试用例所在的文件夹里(这个文件夹可以通过TestContext.TestDeploymentDir属性获取到)。这样,测试代码才能在运行的时候,获取到其所需的测试数据。

  另外,TestContext.DataRow有一个局限,是DataRow属性实际上只能表示一个表(我没有成功地在DataRow里面访问到一个以上的表)。但是一般来说,一个测试类型(也是上面的UsersTest类)都会包含好几个测试用例(类似LogOnTest的单个函数)。如果把一个测试类型的所有测试用例所需要的数据都保存在一个工作簿(worksheet) 里面的话,这个worksheet结果未免过于庞大,难以维护。而如果对每一个测试用例创建一个Excel文件(workbook),后也导致我们的文件夹有太多的Excel文件,同样难以维护。因此当时我们采取的方案是,对每一个测试类型创建一个Excel文件,每一个需要用到测试数据的测试用例有单独的工作簿(Worksheet),工作簿的名字用测试用例的函数名命名。

 

  这样一来,UsersTest里面新的测试用例类似于下面的形式(注意黄色高亮显示的部分):

[TestClass]

public class UsersTest


{

    // 省略其他测试用例


    ...

 

 

    // 测试数据文件的名称与测试用例所在的类型名相同

    [DeploymentItem("UsersTest.xls")]


    // 每一个测试用例有自己的worksheet,注意第三个字符串,worksheet名后面的

    // 美元符号“$”

    [DataSource(

 

        "System.Data.Odbc",

        @"Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq=UsersTest.xls;DefaultDir=.",


        "PermissionTest$", DataAccessMethod.Sequential)]

 

    [TestMethod]

 

    public void PermissionTest()

    {

        ...

    }


}