資料驅動的單元測試疑難排解
更新:2007 年 11 月
當您執行資料驅動的單元測試時,可能會遭遇連接、驗證、部署或其他問題。請使用下列章節中的資訊解決這些問題。
測試無法連接至資料來源
請確定用來執行測試的使用者帳戶可以存取資料來源。若要完成此作業,您必須知道用來執行測試的是哪一個使用者帳戶。例如,當您以遠端方式執行測試時,測試是由代理程式的使用者帳戶所執行的。
ASP.NET 問題
在 IIS Web 伺服器上執行的 ASP.NET 測試是由 'aspnet' 帳戶所執行的。因此,請確認 ASP.NET 使用者可以存取資料來源。
同時,如果您使用 'Excel ODBC Dsn',也必須建立 'System Dsn'。System Dsn 適用於所有使用者。若要建立 DSN,請使用「ODBC 資料來源管理員」。若要完成此作業,請按一下 [開始] 並開啟 [控制台],開啟 [系統管理工具],然後開啟 [資料來源]。
部署資料來源檔
如果您使用 Microsoft Excel 工作表或 .CSV 檔之類的資料來源檔,請確認在測試執行時該檔案是可使用的。進行此作業的一種方式是使用測試回合組態對話方塊,將資料來源檔加入為部署項目,或以測試為單位的部署項目。同時,請指定檔案的相對路徑。如需測試回合組態的詳細資訊,請參閱設定測試執行方式。
驗證問題
請盡可能使用「Windows 驗證」。
連接字串
雖然 [資料連接] 對話方塊適用於連接至 Microsoft SQL Server 和 Oracle,但是當您必須建立與檔案資料來源的連接時,卻是很不方便的。對於這些來源,您必須指定連接字串,然後在 [屬性] 視窗的下拉式清單方塊中選取資料表名稱。
下列資料表包含提供者名稱的範例,以及多數資料提供者的連接字串。
資料來源 |
提供者名稱 |
連接字串 |
MS SQL Server (.NET 提供者) |
System.Data.SqlClient |
Data Source=SqlServerName;InitialCatalog=MyDatabaseName;Integrated Security=True;Connect Timeout=30;User Instance=True |
MS SQL Express Server (.NET 提供者) |
System.Data.SqlClient |
Data Source=.\SQLEXPRESS;AttachDbFilename=C:\ \Test.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True |
MS SQL Server (OLEDB、MDAC 提供者) |
System.Data.OleDb |
Provider=SQLOLEDB;Data Source= SqlServerName;Integrated Security=SSPI;Initial Catalog=MyDatabaseName |
MS SQL Server (OLEDB、Native Client 提供者) |
System.Data.OleDb |
Provider=SQLNCLI;Data Source= MySqlServerComputerName;Integrated Security=SSPI;Initial Catalog= MyDatabaseName |
MS SQL (ODBC) |
System.Data.Odbc |
Driver={SQL Server};Server=SqlServerName;Database=DatabaseName;Trusted_Connection=yes Driver={SQL Server};Server=SqlServerName;Database=DatabaseName;Uid=UserName;Pwd=<password> |
Oracle (.NET 提供者) |
System.Data.OracleClient |
Data Source=OracleServerName;Persist Security Info=True;User ID=scott;Password=<password>;Unicode=True |
Oracle (OLEDB、Oracle 提供者) |
System.Data.OleDb |
Provider=OraOLEDB.Oracle;Data Source=OracleServerName;Persist Security Info=True;OSAuthent=1 Provider=OraOLEDB.Oracle;Data Source=OracleServerName;Persist Security Info=True;User ID=scott;Password=<password> |
Oracle (OLEDB、Microsoft 提供者) |
System.Data.OleDb |
Provider=MSDAORA;Data Source= OracleServerName;Persist Security Info=True; User ID=scott;Password=<password> |
Oracle (ODBC) |
System.Data.Odbc |
Driver={Microsoft ODBC for Oracle};Server=OracleServerName;Uid=scott;Pwd=<password> |
Excel (OLEDB) |
System.Data.OleDb |
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\ Test.xls;Persist Security Info=False;Extended Properties="Excel 8.0" |
Excel (ODBC、MS Excel 驅動程式) |
System.Data.Odbc |
Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq=C:\\Test.xls;DefaultDir=C:\ 秘訣:針對 Sheet1 資料表,使用 Sheet1$ 做為資料表名稱。 |
Excel (ODBC、Dsn) |
System.Data.Odbc |
Dsn=Excel Files;dbq=C:\Test.xls;defaultdir=C:\;driverid=790;maxbuffersize=2048;pagetimeout=5 秘訣:當您在 ASP.NET 中執行測試時,請考慮使用系統 DSN,而不要用使用者 DSN。 |
CSV/文字檔 (OLEDB) |
System.Data.OleDb |
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\;Extended Properties="text;HDR=Yes;FMT=Delimited” 秘訣:對於 test.csv 檔,請以 test#csv 做為資料表名稱。 注意:HDR=Yes 表示第一個資料列包含資料行名稱,而不是實際資料。 |
CSV/文字檔 (ODBC) |
System.Data.Obdc |
Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=c:\;Extensions=asc,csv,tab,txt |
透過 Dsn 的 ODBC |
System.Data.Obdc |
Dsn=MyDsn;Uid=UserName;Pwd=<password> FILEDSN=C:\MyDsn.dsn;Uid=UserName;Pwd=<password> |
從編譯程式碼個別指定資料來源
您可以使用 App.config 檔指定測試的資料來源。這可讓您變更資料來源屬性 (例如伺服器、資料表名稱等),而不需要重新編譯測試組件。當您由命令列執行測試時,請確定 App.config 檔位於與測試組件所在的同一個目錄中。
範例:
[TestMethod][DataSource("MyDataSource")]
[DeploymentItem("MyDataSource.csv")]public void MyTest() {}
App.config 檔的內容:
<configSections><section name="microsoft.visualstudio.qualitytools" type="Microsoft.VisualStudio.QualityTools.UnitTesting.Framework.TestConfigurationSection, Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/></configSections><microsoft.visualstudio.qualitytools><dataSources><add name="MyDataSource" connectionString="MyConnectionString" dataTableName="ChildSearchCriteria" dataAccessMethod="Sequential" /></dataSources></microsoft.visualstudio.qualitytools>
注意事項: |
---|
Run unit tests in application domain 屬性決定是否要在個別應用程式定義域中執行各個單元測試組件。這個屬性預設為 True。如果單元測試不需要個別應用程式定義域或 app.config 檔案就可以正常運作,將這個屬性的值設定為 False 時,單元測試可能會更快速執行。 |
在 TestInitialize 中初始化資料庫後,您的變更並未出現
當資料驅動型測試執行時,「單元測試配接器」會連接至您的資料表,並建置資料列清單。然後針對每一個資料列,它會執行 TestInitialize、TestMethod 和 TestCleanup 方法。如果您在 TestInitialize 中變更資料列,「單元測試配接器」將不會察覺該變更。因此,如果您要變更資料驅動型測試的資料表,請在 ClassInitialize 或 AssemblyInitialize 方法中執行。
單元測試通過但未包含內部結果
這個結果表示您的資料表中沒有包含資料列。
其他問題
如果這裡未列出您的問題,您可以嘗試在支援論壇 (英文) 以及 Visual Studio Team Edition for Developers 和 Visual Studio Team System Test 版的個別論壇中搜尋答案或提出問題。