チュートリアル : データ ソースを定義するための構成ファイルの使用
このチュートリアルでは、単体テスト用に 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 ファイルをプロジェクトに追加するには
テスト プロジェクトに既に app.config ファイルがある場合は、「カスタム構成セクションを定義する」に進んでください。
ソリューション エクスプローラーでテストプロジェクトを右クリックし、[追加] をポイントし、[新しい項目] をクリックします。
[新しい項目の追加] ウィンドウが表示されます。
[アプリケーション構成ファイル] テンプレートを選択して、[追加] をクリックします。
カスタム構成セクションを定義する
app.config ファイルをチェックします。少なくとも XML 宣言とルート要素が含まれています。
カスタム構成セクションを app.config ファイルに追加するには
app.config のルート要素は configuration 要素である必要があります。configSections 要素を configuration 要素に作成します。configSections は、app.config ファイルの最初の要素である必要があります。
configSections 要素に 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 という値を代入します。
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 つの接続文字列を作成します。
接続文字列を定義するには
configSections 要素の後で、connectionStrings 要素を作成します。
connectionStrings 要素に add 要素を 2 つ作成します。
最初の 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 つのデータ ソースを定義します。
データ ソースを定義するには
connectionStrings 要素の後で、microsoft.visualstudio.testtools 要素を作成します。この部分は、「カスタム構成セクションを定義する」で作成されています。
microsoft.visualstudio.testtools 要素に dataSources 要素を作成します。
dataSources 要素に add 要素を 2 つ作成します。
最初の 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 データ ソースを作成するには
testdatasource.accdb という名前の Microsoft Access データベースを作成します。
testdatasource.accdb で、テーブルを作成し、MyDataTable という名前を付けます。
Number データ型を使用して、MyDataTable に Arg1 および Arg2 という名前の 2 つのフィールドを作成します。
MyDataTable に 5 つのエンティティを追加します。Arg1 と Arg2 の値は、それぞれ (10,50), (3,2), (6,0), (0,8) および (12312,1000) となります。
データベースを保存し、閉じます。
接続文字列がデータベースの場所を指すように変更します。Data Source の値をデータベースの場所を反映するように変更します。
Microsoft Excel データ ソースを作成するには
data.xlsx という名前の Microsoft Excel スプレッドシートを作成します。
data.xlsx に既に存在しない場合は、Sheet1 という名前のシートを作成します。
Sheet1 に 2 つの列ヘッダーを作成し、Val1 および Val2 という名前を付けます。
Sheet1 に 5 つのエンティティを追加します。Val1 と Val2 の値は、それぞれ (1,1), (2,2), (3,3), (4,4) および (5,0) となります。
スプレッドシートを保存し、閉じます。
接続文字列がスプレッドシートの場所を指すように変更します。dbq の値をスプレッドシートの場所を反映するように変更します。
app.config データ ソースを使用して単体テストを作成するには
単体テストをテスト プロジェクトに追加します。
詳細については、「既存コードに対する単体テストの作成と実行」を参照してください。
単体テストの自動生成された内容を次のコードで置換します。
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"]); } } }
DataSource 属性をチェックします。app.config ファイルからの設定名が表示されます。
ソリューションをビルドし、MyTestMethod テストおよび MyTestMethod2 テストを実行します。
重要 |
---|
配置ディレクトリのテストを利用できるように、データ ソースのような項目を配置します。 |