方法: データ ドリブン単体テストを作成する
マイクロソフトの単体テスト フレームワークには、マネージ コードの場合を使用して、データ ソースからのテスト メソッドで使用される値を取得するのには、単体テスト メソッドまでを設定できます。メソッドは、連続して簡単は、1 つのメソッドを使用して、さまざまな入力をテストするのには、データ ソースの各行に対して実行されます。
このトピックは、次のセクションで構成されています。
データ ドリブン単体テストを作成するには、次の手順が含まれます。
テスト メソッドで使用される値を含むデータ ソースを作成します。テストを実行してがコンピューターに登録されている任意の種類のデータ ソースがあります。
プライベートの追加TestContextフィールドおよびパブリックTestContextテスト クラスへのプロパティ。
単体テスト メソッドを作成し、追加、 DataSourceAttribute属性にします。
使用して、 DataRowでのテストに使用する値を取得するインデクサー プロパティ。
テスト対象のメソッド
例としては、では私たちが作成されていることを前提としています。
ソリューションと呼ばれるMyBankを受け入れるし、アカウントの種類のトランザクションを処理します。
プロジェクトでMyBankと呼ばれるBankDbは、取引アカウントを管理します。
クラスと呼ばれるMathsで、 DbBankすべてのトランザクションが、銀行に有利であることを確認するのには、算術関数を実行するプロジェクト。
単体テストと呼ばれるプロジェクトBankDbTestsの動作をテストするのには、 BankDbコンポーネント。
単体テストはクラスのと呼ばれるMathsTestsの動作を確認するのには、 Mathsクラス。
メソッドのテストMathsループを使用して 2 つの整数を追加。
public int AddIntegers(int first, int second)
{
int sum = first;
for( int i = 0; i < second; i++)
{
sum += 1;
}
return sum;
}
データ ソースを作成します。
テストするのには、 AddIntegersメソッド、パラメーター、および返されることを期待して、合計値の範囲を指定します。 データ ソース作成します。という名前の Sql Compact データベースを作成する当社の例では、私たちMathsData 、という名前のテーブルAddIntegersData 、次の列の名前と値が含まれています
FirstNumber |
SecondNumber |
Sum |
---|---|---|
0 |
1 |
1 |
1 |
1 |
2 |
2 |
-3 |
-1 |
TestContext テスト クラスに追加します。
ユニット テストのフレームワークを作成し、 TestContext 、データ ドリブン テストにデータ ソース情報を格納するオブジェクト。フレームワークが、このオブジェクトの値として設定、 TestContext作成するプロパティ。
private TestContext testContextInstance;
public TestContext TestContext
{
get { return testContextInstance; }
set { testContextInstance = value; }
}
テスト メソッドでは、データをアクセスする、 DataRowのインデクサー プロパティをTestContext。
テスト メソッドを作成します。
テスト メソッド用AddIntegers非常に簡単です。データ ソースの各行に対して、私たちを呼び出すAddIntegersで、 FirstNumber と SecondNumber 列の値をパラメーターとしては、および戻り値を確認合計列の値。
[DataSource(@"Provider=Microsoft.SqlServerCe.Client.4.0; Data Source=C:\Data\MathsData.sdf;", "Numbers")]
[TestMethod()]
public void AddIntegers_FromDataSourceTest()
{
var target = new Maths();
// Access the data
int x = Convert.ToInt32(TestContext.DataRow["FirstNumber"]);
int y = Convert.ToInt32(TestContext.DataRow["SecondNumber"]);
int expected = Convert.ToInt32(TestContext.DataRow["Sum"]);
int actual = target.IntegerMethod(x, y);
Assert.AreEqual(expected, actual,
"x:<{0}> y:<{1}>",
new object[] {x, y});
}
なお、 Assertメソッドを表示するメッセージを含む、 xとyは、障害が発生した反復値。既定では、アサートされた値、 expectedとactual、失敗したテストの詳細が既に含まれています。
DataSourceAttribute を指定します。
DataSourceの接続文字列、データ ソースや、使用するテーブルの名前をテスト メソッドの属性を指定します。接続文字列の正確な内容は、使用するデータ ソースの種類によって異なります。この例では、SqlServerCe データベースを使用しています。
[DataSource(@"Provider=Microsoft.SqlServerCe.Client.4.0;Data Source=C:\Data\MathsData.sdf", "AddIntegersData")]
DataSource 属性は次の 3 つのコンス トラクターがあります。
[DataSource(dataSourceSettingName)]
1 つのパラメーターを持つコンス トラクターは、ソリューションの app.config ファイルに格納されている接続情報を使用します。DataSourceSettingsName で接続情報を指定する構成ファイルの Xml 要素の名前です。
App.config ファイルを使用して、単体テストに変更を加えずに、データ ソースの場所を変更できます。作成し、app.config ファイルを使用する方法の詳細についてを参照してください。チュートリアル : データ ソースを定義するための構成ファイルの使用
[DataSource(connectionString, tableName)]
DataSource 2 つのパラメーターを持つコンス トラクターは接続文字列、データ ソースとデータは、テスト メソッドを含むテーブルの名前を指定します。
接続文字列が、データ ソースの種類の種類によって異なりますが、データ プロバイダーのインバリアント名前はプロバイダー要素が含まれている必要があります。
[DataSource(
dataProvider,
connectionString,
tableName,
dataAccessMethod
)]
TestContext.DataRow を使用して、データにアクセスするのには
データにアクセスするのには、 AddIntegersDataテーブル、使用、 TestContext.DataRowインデクサー。DataRowDataRowオブジェクトはインデックスまたは列名が列の値を取得するため。値はオブジェクトとして返されるので、それらを適切な型に変換する必要があります。
int x = Convert.ToInt32(TestContext.DataRow["FirstNumber"]);
テストを実行し、結果を表示します。
テスト メソッドの作成が完了したら、テスト プロジェクトをビルドします。テスト メソッド、テストのエクスプ ローラー ウィンドウに表示されます、 テストを実行しないグループ。実行、書き込み、および、テストを再実行すると、エクスプ ローラーのテスト結果のグループに表示テストに失敗、 渡されたテスト、および テストを実行しない。選択することができますすべて実行 すべてのテストを実行するかを選択するには、 **を実行.**を実行するテストの種類を選択します。
テスト結果のバー、エクスプ ローラーの上部には、テストの実行時にアニメートされます。テストが失敗した場合は、すべてのテストに合格すると、緑や赤、バーは、テストの実行の最後になります。テストの実行の概要はテストのエクスプ ローラー ウィンドウの下部の詳細ペインが表示されます。下のペインにそのテストの詳細を表示するには、テストを選択します。
実行した場合は、 AddIntegers_FromDataSourceTestメソッドの例では、結果のバーが赤に変わるし、テスト メソッドに移動、 テストに失敗イテレーションのデータからのいずれかのソースが失敗した場合は、データ駆動のテストを失敗します。テストのエクスプ ローラー ウィンドウで、障害が発生したデータ駆動のテストを選択すると、詳細ペインにデータ行のインデックスで識別される各イテレーションの結果が表示されます。この例では、それが表示されます、 AddIntegersアルゴリズム処理しない負の値が正しくします。
テスト対象のメソッドを修正してテストを再実行して、結果のバーが緑色に変わります、テスト メソッドに移動、 渡されたテストグループ。
参照
関連項目
Microsoft.VisualStudio.TestTools.UnitTesting.DataSourceAttribute
Microsoft.VisualStudio.TestTools.UnitTesting.TestContext
Microsoft.VisualStudio.TestTools.UnitTesting.Assert
概念
マネージ コード用の Microsoft 単体テスト フレームワークを使用した .NET Framework 用単体テストの記述