次の方法で共有


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

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

  • app.config ファイルの作成。

  • カスタム構成セクションの定義。

  • 接続文字列の定義。

  • データ ソースの定義。

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

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 のルート要素は構成要素である必要があります。 構成要素内に configSections 要素を作成します。 configSections は、app.config ファイルの最初の要素である必要があります。

  2. configSections 要素内にセクション要素を作成します。

  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" />

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

接続文字列を定義する

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

注意事項

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

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

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

  2. connectionStrings 要素内に、2 つの 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"

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. 最初の 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. テーブルを作成し、MyDataTable名前を付けます。

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

  4. MyDataTableArg1にそれぞれ次の値を持つ 5 つのエンティティをArg2に追加します。(10,50)、(3,2)、(6,0)、(0,8)、および (12312,1000)。

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

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

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

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

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

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

  4. Sheet1に、次の値で5つのエンティティをそれぞれ追加します。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 テストを実行します。

Important

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