共用方式為


資料驅動的單元測試疑難排解

更新: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 版的個別論壇中搜尋答案或提出問題。

請參閱

工作

HOW TO:設定資料驅動的單元測試

概念

為資料驅動的單元測試編碼