逐步解說:使用組態檔定義資料來源
這個逐步解說會示範如何使用 app.config 檔案中所定義的資料來源來進行單元測試。 您會學到如何建立 app.config 檔案,它會定義 DataSourceAttribute 類別可以使用的資料來源。 本逐步解說將說明的工作包括下列項目:
建立 app.config 檔案。
定義自訂的組態區段。
定義連接字串。
定義資料來源。
使用 DataSourceAttribute 類別存取資料來源。
必要條件
若要完成這個逐步解說,您將需要:
Visual Studio Premium 或 Visual Studio Ultimate
Microsoft Access 或 Microsoft Excel,以便提供至少其中一種測試方法的資料。
測試專案所在的 Visual Studio 2012 方案。
建立 App.config 檔案
若要在專案中加入 app.config 檔案
如果您的測試專案已經有 app.config 檔,請移到定義自訂組態區段。
在 [方案總管] 中以滑鼠右鍵按一下您的測試專案,指向 [加入],然後按一下 [新增項目]。
[加入新項目] 視窗隨即開啟。
選取 [應用程式組態檔] 範本,然後按一下 [加入]。
定義自訂組態區段
檢查 app.config 檔。 這個檔案至少會包含 XML 宣告和一個根項目 (Root Element)。
若要將自訂組態區段加入到 app.config 檔案中
app.config 的根項目應該是 configuration 項目。 在 configuration 項目內建立 configSections 項目。 configSections 應該是 app.config 檔案中的第一個項目。
在 configSections 項目中建立 section 項目。
在 section 項目中加入名為 name 的屬性 (Attribute),並為它指派一個與 microsoft.visualstudio.testtools 相等的值。 加入另一個名為 type 的屬性,並為它指派一個與 Microsoft.VisualStudio.TestTools.UnitTesting.TestConfigurationSection, Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 相等的值。
section 項目應該看起來像這樣:
<section name="microsoft.visualstudio.testtools" type="Microsoft.VisualStudio.TestTools.UnitTesting.TestConfigurationSection, Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
注意事項 |
---|
組件名稱必須與您所使用的 Microsoft Visual Studio .NET Framework 組建相符。如果您正在使用 Visual Studio .NET Framework 3.5,請將 Version 設定為 9.0.0.0。如果您正在使用 Visual Studio .NET Framework 2.0,請將 Version 設定為 8.0.0.0。 |
定義連接字串
連接字串會定義提供者存取資料來源的特定資訊。 在組態檔中定義的連接字串,可以提供能在整個應用程式中重複使用的資料提供者資訊。 在這個章節中,您會建立兩個連接字串,以供「自訂組態區段」中所定義的資料來源使用。
若要定義連接字串
在 configSections 項目之後建立 connectionStrings 項目。
在 connectionStrings 項目內,建立兩個 add 項目。
在第一個 add 項目中建立下列屬性和值,以連接至 Microsoft Access 資料庫:
屬性 |
值 |
---|---|
name |
"MyJetConn" |
connectionString |
"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\testdatasource.accdb; Persist Security Info=False;" |
providerName |
"System.Data.OleDb" |
在第二個 add 項目中建立下列屬性和值,以連接至 Microsoft Excel 試算表:
name |
"MyExcelConn" |
connectionString |
"Dsn=Excel Files;dbq=data.xlsx;defaultdir=.; driverid=790;maxbuffersize=2048;pagetimeout=5" |
providerName |
"System.Data.Odbc" |
connectionStrings 項目應該看起來像這樣:
<connectionStrings>
<add name="MyJetConn" connectionString="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\testdatasource.accdb; Persist Security Info=False;" providerName="System.Data.OleDb" />
<add name="MyExcelConn" connectionString="Dsn=Excel Files;dbq=data.xlsx;defaultdir=.; driverid=790;maxbuffersize=2048;pagetimeout=5" providerName="System.Data.Odbc" />
</connectionStrings>
定義資料來源
資料來源區段會包含四個屬性,測試引擎會利用這些屬性,從資料來源中擷取資料。
name 會定義 DataSourceAttribute 用來指定要使用哪一個資料來源的識別。
connectionString 識別了在先前<定義連接字串>小節中所建立的連接字串。
dataTableName 會定義測試中要使用的資料所在的資料表或工作表。
dataAccessMethod 會定義存取資料來源中之資料值的技巧。
在這個章節中,您會定義兩個將用於單元測試中的資料來源。
若要定義資料來源
在 connectionStrings 項目之後建立 microsoft.visualstudio.testtools 項目。 這個區段會建立在「定義自訂組態區段」中。
在 microsoft.visualstudio.testtools 項目中建立 dataSources 項目。
在 dataSources 項目內建立兩個 add 項目。
在第一個 add 項目中建立下列屬性和值,以供 Microsoft Access 資料來源使用:
屬性 |
值 |
---|---|
name |
"MyJetDataSource" |
connectionString |
"MyJetConn" |
dataTableName |
"MyDataTable" |
dataAccessMethod |
"Sequential" |
在第二個 add 項目中建立下列屬性和值,以供 Microsoft Excel 資料來源使用:
Name |
"MyExcelDataSource" |
connectionString |
"MyExcelConn" |
dataTableName |
"Sheet1$" |
dataAccessMethod |
"Sequential" |
microsoft.visualstudio.testtools 項目應該看起來像這樣:
<microsoft.visualstudio.testtools>
<dataSources>
<add name="MyJetDataSource" connectionString="MyJetConn" dataTableName="MyDataTable" dataAccessMethod="Sequential"/>
<add name="MyExcelDataSource" connectionString="MyExcelConn" dataTableName="Sheet1$" dataAccessMethod="Sequential"/>
</dataSources>
</microsoft.visualstudio.testtools>
最終的 app.config 檔案看起來應該像這樣:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="microsoft.visualstudio.testtools" type="Microsoft.VisualStudio.TestTools.UnitTesting.TestConfigurationSection, Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</configSections>
<connectionStrings>
<add name="MyJetConn" connectionString="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\testdatasource.accdb; Persist Security Info=False;" providerName="System.Data.OleDb" />
<add name="MyExcelConn" connectionString="Dsn=Excel Files;dbq=data.xlsx;defaultdir=.; driverid=790;maxbuffersize=2048;pagetimeout=5" providerName="System.Data.Odbc" />
</connectionStrings>
<microsoft.visualstudio.testtools>
<dataSources>
<add name="MyJetDataSource" connectionString="MyJetConn" dataTableName="MyDataTable" dataAccessMethod="Sequential"/>
<add name="MyExcelDataSource" connectionString="MyExcelConn" dataTableName="Sheet1$" dataAccessMethod="Sequential"/>
</dataSources>
</microsoft.visualstudio.testtools>
</configuration>
使用 app.config 中所定義的資料來源建立單元測試
現在 app.config 檔案已經定義完成,您將建立單元測試,此單位測試會使用 app.config 檔案中所定義之資料來源中的資料。 在這個章節中,您將執行下列項目:
建立在 app.config 檔案中找到的資料來源。
使用兩個測試方法中的資料來源,它們會比較每個資料來源中的值。
若要建立 Microsoft Access 資料來源
建立名為 testdatasource.accdb 的 Microsoft Access 資料庫。
在 testdatasource.accdb 中建立資料表並將它命名為 MyDataTable。
使用 Number 資料型別,在 MyDataTable 中建立兩個名為 Arg1 和 Arg2 的欄位。
在 MyDataTable 中加入五個實體,分別使用下列的值做為 Arg1 和 Arg2 的值:(10,50)、(3,2)、(6,0)、(0,8) 和 (12312,1000)。
儲存並關閉資料庫。
變更連接字串以指到此資料庫的位置。 變更 Data Source 的值,使其反映資料庫的位置。
若要建立 Microsoft Excel 資料來源
建立名為 data.xlsx 的 Microsoft Excel 試算表。
建立名為 Sheet1 的工作表 (如果 data.xlsx 中尚無這個工作表)。
在 Sheet1 中建立兩個資料行行首,分別命名為 Val1 和 Val2。
在 Sheet1 中加入五個實體,分別使用下列的值做為 Val1 和 Val2 的值:(1,1)、(2,2)、(3,3)、(4,4) 和 (5,0)。
儲存並關閉試算表。
變更連接字串以指到此試算表的位置。 變更 dbq 的值,使其反映試算表的位置。
若要使用 app.config 資料來源來建立單元測試
在測試專案中加入單元測試。
如需詳細資訊,請參閱針對現有的程式碼建立和執行單元測試。
以下列程式碼取代自動產生的單元測試內容:
using System; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace TestProject1 { [TestClass] public class UnitTest1 { private TestContext context; public TestContext TestContext { get { return context; } set { context = value; } } [TestMethod()] [DeploymentItem("MyTestProject\\testdatasource.accdb")] [DataSource("MyJetDataSource")] public void MyTestMethod() { int a = Int32.Parse(context.DataRow["Arg1"].ToString()); int b = Int32.Parse(context.DataRow["Arg2"].ToString()); Assert.AreNotEqual(a, b, "A value was equal."); } [TestMethod()] [DeploymentItem("MyTestProject\\data.xlsx")] [DataSource("MyExcelDataSource")] public void MyTestMethod2() { Assert.AreEqual(context.DataRow["Val1"], context.DataRow["Val2"]); } } }
檢查 DataSource 屬性。 請注意 app.config 檔案的設定名稱。
建置您的方案,然後執行 MyTestMethod 和 MyTestMethod2 測試。
重要
部署項目 (例如資料來源),使其能供部署目錄中的測試存取。