為資料驅動的單元測試編碼
更新:2007 年 11 月
如果單元測試含有資料驅動 (Data-Driven) 測試所需的屬性 (Attribute),它就會做為「資料驅動」測試使用。若要指派這些屬性和其值,您可以使用 [屬性] 視窗,或者直接在測試的程式碼中加入屬性。
如需利用編輯屬性之方式將單元測試設定為資料驅動測試的詳細資訊,請參閱 HOW TO:設定資料驅動的單元測試。
這個主題描述如何利用 DataSource 屬性和 TestContext 類別,將單元測試的程式編寫成資料驅動的單元測試。
使用資料來源中的資料
執行資料驅動的單元測試時,資料會從資料來源的資料列中擷取。這些資料再透過 TestContext 類別的 DataRow 和 DataConnection 屬性,為執行中的單元測試所利用。
在下列範例中,DataRow() 屬於 DataRow 型別,LastName 則是與資料驅動測試目前的反覆運算 (Iteration) 關聯之資料列中有效資料行的名稱。
TestContext.DataRow["LastName"]
當 LastName 依名稱參考資料行時,您也可以依照資料行號碼參考資料行。
在表格的每個資料列中,您可以存取任何數目的資料行。例如,您可以一次擷取許多資料行的資料、將這些資料用於計算中,再將計算結果與最後一個資料行中的預期傳回值進行比較。
撰寫資料驅動的單元測試
若要建立資料驅動的單元測試,起點可以是您手動建立的單元測試,也可以是自動產生的單元測試。如需詳細資訊,請參閱 HOW TO:撰寫單元測試 和 HOW TO:產生單元測試。
若要設定現有的單元測試,請加入定義您希望使用之資料來源的屬性、想要的資料存取方式,以及其資料列要做為測試之輸入的資料表。如需設定這些屬性的詳細資訊,請參閱 HOW TO:設定資料驅動的單元測試。
例如,下列程式碼是取自會使用 Northwind 資料庫之資料的資料驅動單元測試。
namespace TestProject1
{
[TestClass]
public class TestClass
{
private TestContext m_testContext;
public TestContext TestContext
{
get { return m_testContext; }
set { m_testContext = value; }
}
[TestMethod]
[DeploymentItem("FPNWIND.MDB")]
[DataSource("System.Data.OleDb", "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"FPNWIND.MDB\"", "Employees", DataAccessMethod.Sequential)]
public void TestMethod()
{
Console.WriteLine( "EmployeeID: {0}, LastName: {1}", TestContext.DataRow["EmployeeID"], TestContext.DataRow["LastName"] );
}
}
}
在這個範例中,測試方法內的程式碼會使用資料來源之 "Employees" 資料表的 LastName 和 EmployeeID 資料行中的值。測試方法會透過 TestContext 屬性存取這些值,這個屬性會定義於此方法所在的測試類別中。