將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() { ... } } |