共用方式為


逐步解說:使用組態檔來定義數據源

本逐步解說說明如何使用 app.config 檔案中定義的數據源來進行單元測試。 您將瞭解如何建立 app.config 檔案,以定義 DataSourceAttribute 類別可以使用的數據源。 本逐步解說中呈現的工作包括下列各項:

  • 建立 app.config 檔案。

  • 定義自定義組態區段。

  • 定義連接字串。

  • 定義數據源。

  • 使用 DataSourceAttribute 類別存取數據來源。

注意

DataSourceAttribute 目前僅支援 .NET Framework。

先決條件

若要完成本逐步解說,您需要:

  • Visual Studio Enterprise

  • Microsoft Access 或 Microsoft Excel,為至少一個測試方法提供數據。

  • 包含測試專案的Visual Studio方案。

將 app.config 檔案新增至專案

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

  2. 在 [方案總管] 中,對測試專案以滑鼠右鍵點一下,然後選擇 [新增>新增項目]。

    [新增項目] 視窗開啟。 如果您沒有看到所有項目範本,請選擇 [顯示所有範本],然後選擇項目範本。

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

定義自定義組態區段

檢查 app.config 檔案。 它至少包含 XML 宣告和根元素。

將自定義組態區段新增至 app.config 檔案

  1. app.config 的根元素應該是 配置 元素。 在 組態 元素內建立 configSections 專案。 configSections 應該是 app.config 檔案中的第一個元素。

  2. configSections 元素內,建立 區段 元素。

  3. 在 [] 區段中的 元素中,新增名為 name 的屬性,並將值指派為 microsoft.visualstudio.testtools。 新增名為 type 的另一個屬性,並將值指派為 Microsoft.VisualStudio.TestTools.UnitTesting.TestConfigurationSection, Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions

區段 元素看起來應該像這樣:

<section name="microsoft.visualstudio.testtools" type="Microsoft.VisualStudio.TestTools.UnitTesting.TestConfigurationSection, Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions" />

注意

元件名稱必須符合您使用的版本。

定義連接字串

連接字串會定義存取數據源的提供者特定資訊。 組態檔中定義的連接字串可跨應用程式提供可重複使用的數據提供者資訊。 在本節中,您會建立兩個連接字串,供自定義組態區段中定義的數據源使用。

謹慎

連接字串可以包含敏感數據(例如密碼)。 連線字串會以純文字形式儲存在原始程式碼和編譯的元件中。 限制對原始程式碼和元件的存取,以保護此敏感性資訊。

定義連接字串

  1. configSections 項目之後,新增 connectionStrings 元素。

  2. connectionStrings 元素內,建立兩個 add 元素。

  3. 在第一個 新增 元素中,為與 Microsoft Access 資料庫的連線建立下列屬性和值:

屬性 價值觀
name "MyJetConn"
connectionString "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\testdatasource.accdb; Persist Security Info=False;"
providerName "System.Data.OleDb"

在第二個 新增 元素中,建立與 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. 在第一個 新增 元素中,為 Microsoft Access 數據源建立下列屬性和值:

屬性 價值觀
name "MyJetDataSource"
connectionString "MyJetConn"
dataTableName "MyDataTable"
dataAccessMethod "Sequential"

在第二個 新增 元素中,為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.TestPlatform.TestFramework.Extensions" />
    </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.accdbMicrosoft Access 資料庫。

  2. testdatasource.accdb中建立數據表並將其命名為 MyDataTable

  3. 使用 Number 數據類型,在名為 Arg1Arg2MyDataTable 中建立兩個字段。

  4. 針對 Arg1Arg2,分別將五個實體新增至 MyDataTable:(10,50)、(3,2)、(6,0)、(0,8)和(12312,1000)。

  5. 儲存並關閉資料庫。

  6. 將連接字串變更為指向資料庫的位置。 變更 Data Source 的值,以反映資料庫的位置。

建立Microsoft Excel 數據源

  1. 建立名為 data.xlsxMicrosoft Excel 電子表格。

  2. data.xlsx中尚未存在名為 Sheet1 的工作表,請建立該工作表。

  3. Sheet1中建立兩個數據行標頭,並將其命名為 Val1Val2

  4. 將五個實體分別新增至 Sheet1,以在 Val1Val2中的數值為:(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 測試。

重要

將數據源等項目部署到測試可存取的部署目錄中。