このチュートリアルでは、単体テストに app.config ファイルで定義されているデータ ソースを使用する方法について説明します。 クラスで使用できるデータ ソースを定義する DataSourceAttribute作成する方法について説明します。 このチュートリアルで説明するタスクは次のとおりです。
app.config ファイルの作成。
カスタム構成セクションの定義。
接続文字列の定義。
データ ソースの定義。
DataSourceAttribute クラスを使用してデータ ソースにアクセスする。
注
DataSourceAttribute は現在、.NET Framework でのみサポートされています。
[前提条件]
このチュートリアルを完了するには、次のものが必要です。
Visual Studio Enterprise
少なくとも 1 つのテスト メソッドのデータを提供する Microsoft Access または Microsoft Excel。
テスト プロジェクトを含む Visual Studio ソリューション。
app.config ファイルをプロジェクトに追加する
テスト プロジェクトに 既にapp.config ファイルがある場合は、「 カスタム構成の定義」セクションに移動します。
ソリューション エクスプローラーでテスト プロジェクトを右クリックし、[追加>新しい項目] を選択します。
[ 新しい項目の追加] ウィンドウが開きます。 すべての項目テンプレートが表示されない場合は、[テンプレートをすべて表示] を選択してから、項目テンプレートを選びます。
アプリケーション構成ファイル テンプレートを選択し、[追加] をクリックします。
カスタム構成セクションを定義する
app.config ファイルを確認します。 少なくとも XML 宣言とルート要素が含まれています。
app.config ファイルにカスタム構成セクションを追加するには
app.config のルート要素は構成要素である必要があります。 構成要素内に configSections 要素を作成します。 configSections は、app.config ファイルの最初の要素である必要があります。
configSections 要素内にセクション要素を作成します。
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 つの接続文字列を作成します。
注意事項
接続文字列には、機密データ (パスワードなど) を含めることができます。 接続文字列は、ソース コードとコンパイル済みアセンブリのプレーン テキストに格納されます。 この機密情報を保護するために、ソース コードとアセンブリへのアクセスを制限します。
接続文字列を定義するには
configSections 要素の後にconnectionStrings 要素を作成します。
connectionStrings 要素内に、2 つの add 要素を作成します。
最初の 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 つのデータ ソースを定義します。
データ ソースを定義するには
connectionStrings 要素の後に、microsoft.visualstudio.testtools 要素を作成します。 このセクションは、「カスタム構成の定義」セクションで作成されました。
microsoft.visualstudio.testtools 要素内に dataSources 要素を作成します。
dataSources 要素内に、2 つの add 要素を作成します。
最初の 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 データ ソースを作成するには
testdatasource.accdb という名前の Microsoft Access データベースを作成します。
テーブルを作成し、
MyDataTableに名前を付けます。MyDataTableデータ型を使用して、Arg1とArg2という名前のNumberに 2 つのフィールドを作成します。MyDataTableとArg1にそれぞれ次の値を持つ 5 つのエンティティをArg2に追加します。(10,50)、(3,2)、(6,0)、(0,8)、および (12312,1000)。データベースを保存して閉じます。
データベースの場所を指す接続文字列を変更します。 データベースの場所を反映するように
Data Sourceの値を変更します。
Microsoft Excel データ ソースを作成するには
data.xlsxという名前の Microsoft Excel スプレッドシートを作成します。
data.xlsxにまだ存在しない場合は、
Sheet1という名前のシート を作成します 。2 つの列ヘッダーを作成し、
Val1でVal2およびSheet1に名前を付けます。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 テストを実行します。
Important
デプロイ ディレクトリ内のテストからアクセスできるように、データ ソースなどの項目をデプロイします。