チュートリアル: データ ソースを定義するための構成ファイルの使用

このチュートリアルでは、単体テスト用に app.config ファイルで定義されたデータ ソースを使用する方法について説明します。 ここでは、DataSourceAttribute クラスで使用できるデータ ソースを定義する app.config ファイルの作成方法を学習します。 このチュートリアルでは、次のタスクについて説明します。

  • app.config ファイルを作成する。

  • カスタム構成セクションを定義する。

  • 接続文字列を定義する。

  • データ ソースを定義する。

  • DataSourceAttribute クラスを使用してデータ ソースにアクセスする。

Note

DataSourceAttribute は現在 .NET Framework でのみサポートされています。

前提条件

このチュートリアルを完了するには、次の条件が必要です。

  • Visual Studio Enterprise

  • 少なくとも 1 つのテスト メソッドにデータを提供する Microsoft Access または Microsoft Excel

  • テスト プロジェクトを含む Visual Studio ソリューション

app.config ファイルをプロジェクトに追加する

  1. テスト プロジェクトに既に app.config ファイルが存在する場合は、「カスタム構成セクションを定義する」に進みます。

  2. ソリューション エクスプローラーで、テスト プロジェクトを右クリックし、[追加]>[新しい項目] の順に選択します。

    [新しい項目の追加] ウィンドウが開きます。 すべての項目テンプレートが表示されない場合は、[すべてのテンプレートを表示] を選択してから、項目テンプレートを選択します。

  3. [アプリケーション構成ファイル] テンプレートを選択し、[追加] をクリックします。

カスタム構成セクションを定義する

app.config ファイルを確認します。 少なくとも XML 宣言とルート要素が含まれています。

app.config ファイルにカスタム構成セクションを追加するには

  1. app.config のルート要素は configuration 要素である必要があります。 configuration 要素内に configSections 要素を作成します。 configSections は、app.config ファイル内で最初の要素である必要があります。

  2. configSections 要素内に section 要素を作成します。

  3. section 要素に、name という属性を追加し、その属性に microsoft.visualstudio.testtools の値を割り当てます。 type という別の属性を追加し、その属性に Microsoft.VisualStudio.TestTools.UnitTesting.TestConfigurationSection, Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions の値を割り当てます。

section 要素は次のようになります。

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

Note

アセンブリ名は、使用しているバージョンと一致する必要があります。

接続文字列を定義する

接続文字列は、データ ソースにアクセスするためのプロバイダー固有の情報を定義します。 構成ファイルで定義された接続文字列は、アプリケーション全体で再利用可能なデータ プロバイダー情報を提供します。 このセクションでは、カスタム構成セクションで定義されているデータ ソースによって使用される 2 つの接続文字列を作成します。

注意事項

接続文字列には、機密データ (パスワードなど) を含めることができます。 接続文字列は、ソース コードのプレーン テキストおよびコンパイル済みアセンブリに格納されます。 この機密情報を保護するために、ソース コードとアセンブリへのアクセスを制限します。

接続文字列を定義するには

  1. configSections 要素の後に connectionStrings 要素を作成します。

  2. connectionStrings 要素内に 2 つの add 要素を作成します。

  3. 1 つ目の 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"

2 つ目の 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>

データ ソースを定義する

データ ソース セクションには、テスト エンジンがデータ ソースからデータを取得するために使用する 4 つの属性が含まれます。

  • name は、使用するデータ ソースを指定するために DataSourceAttribute で使用される ID を定義します。

  • connectionString は、前の「接続文字列を定義する」セクションで作成した接続文字列を識別します。

  • dataTableName は、テストで使用するデータを保持するテーブルまたはシートを定義します。

  • dataAccessMethod は、データ ソース内のデータ値にアクセスする方法を定義します。

ここでは、単体テストで使用する 2 つのデータ ソースを定義します。

データ ソースを定義するには

  1. connectionStrings 要素の後に、microsoft.visualstudio.testtools 要素を作成します。 この部分は、「カスタム構成セクションを定義する」セクションで作成されています。

  2. microsoft.visualstudio.testtools 要素内に dataSources 要素を作成します。

  3. dataSources 要素内に 2 つの add 要素を作成します。

  4. 1 つ目の add 要素には、Microsoft Access データ ソース用の次の属性と値を作成します。

属性
name "MyJetDataSource"
connectionString "MyJetConn"
dataTableName "MyDataTable"
dataAccessMethod "Sequential"

2 つ目の 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.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 ファイルにあるデータ ソースを作成する。

  • 各データ ソースの値を比較する 2 つのテスト メソッド内のデータ ソースを使用する。

Microsoft Access データ ソースを作成するには

  1. testdatasource.accdb という名前の Microsoft Access データベースを作成します。

  2. testdatasource.accdb 内にテーブルを作成し、MyDataTable と名前を付けます。

  3. Number データ型を使用して、MyDataTableArg1Arg2 という名前の 2 つのフィールドを作成します。

  4. Arg1Arg2 の値がそれぞれ (10,50)、(3,2)、(6,0)、(0,8)、(12312,1000) となる 5 つのエンティティを MyDataTable に追加します。

  5. データベースを保存して閉じます。

  6. データベースの場所を指すように接続文字列を変更します。 データベースの場所を反映するように Data Source の値を変更します。

Microsoft Excel データ ソースを作成するには

  1. data.xlsx という名前の Microsoft Excel スプレッドシートを作成します。

  2. Sheet1 という名前のシートが data.xlsx にまだ存在しない場合は作成します。

  3. Sheet1 に 2 つの列ヘッダーを作成し、Val1Val2 という名前を付けます。

  4. Val1Val2 の値がそれぞれ (1,1)、(2,2)、(3,3)、(4,4)、(5,0) となる 5 つのエンティティを Sheet1 に追加します。

  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 テストを実行します。

重要

データ ソースなどの項目を、配置ディレクトリのテストからアクセスできるように配置します。