共用方式為


逐步解說:使用組態檔定義資料來源

這個逐步解說會示範如何使用 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 檔案

  1. 如果您的測試專案已經有 app.config 檔,請移到定義自訂組態區段。

  2. 在 [方案總管] 中以滑鼠右鍵按一下您的測試專案,指向 [加入],然後按一下 [新增項目]。

    [加入新項目] 視窗隨即開啟。

  3. 選取 [應用程式組態檔] 範本,然後按一下 [加入]。

定義自訂組態區段

檢查 app.config 檔。 這個檔案至少會包含 XML 宣告和一個根項目 (Root Element)。

若要將自訂組態區段加入到 app.config 檔案中

  1. app.config 的根項目應該是 configuration 項目。 在 configuration 項目內建立 configSections 項目。 configSections 應該是 app.config 檔案中的第一個項目。

  2. 在 configSections 項目中建立 section 項目。

  3. 在 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。

定義連接字串

連接字串會定義提供者存取資料來源的特定資訊。 在組態檔中定義的連接字串,可以提供能在整個應用程式中重複使用的資料提供者資訊。 在這個章節中,您會建立兩個連接字串,以供「自訂組態區段」中所定義的資料來源使用。

若要定義連接字串

  1. 在 configSections 項目之後建立 connectionStrings 項目。

  2. 在 connectionStrings 項目內,建立兩個 add 項目。

  3. 在第一個 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 會定義存取資料來源中之資料值的技巧。

在這個章節中,您會定義兩個將用於單元測試中的資料來源。

若要定義資料來源

  1. 在 connectionStrings 項目之後建立 microsoft.visualstudio.testtools 項目。 這個區段會建立在「定義自訂組態區段」中。

  2. 在 microsoft.visualstudio.testtools 項目中建立 dataSources 項目。

  3. 在 dataSources 項目內建立兩個 add 項目。

  4. 在第一個 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 資料來源

  1. 建立名為 testdatasource.accdb 的 Microsoft Access 資料庫。

  2. 在 testdatasource.accdb 中建立資料表並將它命名為 MyDataTable。

  3. 使用 Number 資料型別,在 MyDataTable 中建立兩個名為 Arg1 和 Arg2 的欄位。

  4. 在 MyDataTable 中加入五個實體,分別使用下列的值做為 Arg1 和 Arg2 的值:(10,50)、(3,2)、(6,0)、(0,8) 和 (12312,1000)。

  5. 儲存並關閉資料庫。

  6. 變更連接字串以指到此資料庫的位置。 變更 Data Source 的值,使其反映資料庫的位置。

若要建立 Microsoft Excel 資料來源

  1. 建立名為 data.xlsx 的 Microsoft Excel 試算表。

  2. 建立名為 Sheet1 的工作表 (如果 data.xlsx 中尚無這個工作表)。

  3. 在 Sheet1 中建立兩個資料行行首,分別命名為 Val1 和 Val2。

  4. 在 Sheet1 中加入五個實體,分別使用下列的值做為 Val1 和 Val2 的值:(1,1)、(2,2)、(3,3)、(4,4) 和 (5,0)。

  5. 儲存並關閉試算表。

  6. 變更連接字串以指到此試算表的位置。 變更 dbq 的值,使其反映試算表的位置。

若要使用 app.config 資料來源來建立單元測試

  1. 在測試專案中加入單元測試。

    如需詳細資訊,請參閱針對現有的程式碼建立和執行單元測試

  2. 以下列程式碼取代自動產生的單元測試內容:

    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"]);
            }
        }
    }
    
  3. 檢查 DataSource 屬性。 請注意 app.config 檔案的設定名稱。

  4. 建置您的方案,然後執行 MyTestMethod 和 MyTestMethod2 測試。

重要

部署項目 (例如資料來源),使其能供部署目錄中的測試存取。

請參閱

概念

使用單元測試驗證程式碼

測試應用程式

如何:建立資料驅動型單元測試

其他資源

針對現有的程式碼建立和執行單元測試