次の方法で共有


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

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

  • app.config ファイルの作成

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

  • 接続文字列の定義

  • データ ソースの定義

  • DataSourceAttribute クラスを使用したデータ ソースへのアクセス

必須コンポーネント

このチュートリアルを完了するための要件は次のとおりです。

  • Visual Studio Premium または Visual Studio Ultimate

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

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

App.config ファイルを作成する

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

  1. テスト プロジェクトに既に app.config ファイルがある場合は、「カスタム構成セクションを定義する」に進んでください。

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

    [新しい項目の追加] ウィンドウが表示されます。

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

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

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

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

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

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

  3. section 要素に、name という属性を追加し、その属性に 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 に設定します。

接続文字列を定義する

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

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

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

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

  3. 最初の add 要素に、Microsoft Access データベースに接続するための次の属性と値を作成します。

属性

Values

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 要素に add 要素を 2 つ作成します。

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

属性

Values

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.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 ファイルのデータ ソースを作成します。

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

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

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

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

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

  4. MyDataTable に 5 つのエンティティを追加します。Arg1 と 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. Sheet1 に 2 つの列ヘッダーを作成し、Val1 および Val2 という名前を付けます。

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

重要 : 重要

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

参照

概念

単体テストを使用したコードの検証

アプリケーションのテスト

方法: データ ドリブン単体テストを作成する

その他の技術情報

既存コードに対する単体テストの作成と実行