|
|
連載:VSTSの単体テスト機能は本当に使えるのか?
第3回 VSTSで提供される注目すべき単体テスト機能
株式会社 アークウェイ 中西 庸文
(Microsoft MVP 2006 - Solutions Architect)
2007/02/07 |
|
|
■データ・ドリブン単体テストの記述
まず、新しいテスト・クラスを追加する。VS 2005のソリューション・エクスプローラ上で、「PetShop.Tests」プロジェクトを右クリックしてコンテキスト・メニューを表示し、[追加]−[新しいテスト]を選択する。テンプレートとして「単体テスト」が選択された状態で[新しいテストの追加]ダイアログ上でテスト名に「CartTest」と入力し、テスト・クラスをテスト・プロジェクトに追加する。
 |
テスト・クラスの追加 |
VS 2005のソリューション・エクスプローラ上で、テスト・プロジェクトを右クリックしてコンテキスト・メニューを表示し、そこから[追加]−[新しいテスト]を選択する。これにより、テスト・クラスをテスト・プロジェクトに追加するためのダイアログが表示される。 |
次に、追加されたCartTestクラスにテスト・メソッドのメソッド・スタブを記述する。
[TestMethod]
public void カートに商品が追加できるべき()
{
}
|
|
テスト・メソッドのメソッド・スタブ |
続いてこのテスト・メソッドがデータ・ドリブン単体テストとなるように、データ接続の設定を行う。
VS 2005のメニュー・バーから[テスト]−[ウィンドウ]−[テスト ビュー]を選択してテスト・ビューを表示する。テスト・ビューで「カートに商品が追加できるべき」のテストを選択すると、プロパティ・ウィンドウに[データ接続文字列]が表示されるので、ここでテスト用データベースへの接続設定を行う。[接続のプロパティ]ダイアログ上で、テスト用データベースのあるサーバ名とデータベースを選択して設定を保存する。
 |
データ接続の設定 |
テスト・ビューで対象の単体テストを選択すると表示されるプロパティ・ウィンドウの[データ接続文字列]で[…]ボタンをクリックする。これにより、テスト用データベースへの接続設定を行うためのダイアログが表示される。 |
続いてプロパティ・ウィンドウの[データ テーブル名]に「AddCartTest」と入力する。
これらの設定によって自動的に変更されたテスト・メソッドの属性を以下に示す。サーバ名は適宜読み替えてほしい。
[DataSource("System.Data.SqlClient", "Data Source=ARCHWAY-TSUNE02;Initial Catalog=MSPetShop4UnitTest;Integrated Security=True", "AddCartTest", DataAccessMethod.Sequential), TestMethod]
public void カートに商品が追加できるべき()
{
}
|
|
データ接続の設定が反映されたテスト・メソッドのスケルトン・コード |
データ・ドリブン単体テストでは、テスト用テーブルから取得されたテスト・データにアクセスするためにTestContextプロパティを用意する必要がある。
テスト対象のクラスから単体テストを自動生成した場合にはTestContextプロパティの記述は自動的に追加されるが、今回のように手動でテスト・クラスを作成した場合には自分でTestContextプロパティの記述を行う必要がある。
それではCartTestクラスにTestContextプロパティの記述を追加しよう。なお、TestContextプロパティの値は、VSTSのテスティング・フレームワークによって実行時に割り当てられることになる。
private TestContext testContextInstance;
/// <summary>
/// 現在のテスト実行の情報および機能を提供するテスト・コンテキスト
/// を取得または設定する。
/// </summary>
public TestContext TestContext
{
get { return testContextInstance; }
set { testContextInstance = value; }
}
|
|
TestContextプロパティの記述 |
これでようやくデータ・ドリブン単体テストの実装を行うことができる。テスト用テーブルに格納されているテスト・データへのアクセスは、TestContext.DataRowプロパティを呼び出すことによって可能となる。
以下に完成したテスト・クラスの内容を示す。
using System;
using System.Text;
using System.Collections.Generic;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Data;
using PetShop.BLL;
using PetShop.Model;
namespace PetShop.Tests
{
/// <summary>
/// CartTestの概要の説明。
/// </summary>
[TestClass]
public class CartTest
{
private TestContext testContextInstance;
/// <summary>
/// 現在のテストの実行についての情報および機能を提供する
/// テスト・コンテキストを取得または設定する。
/// </summary>
public TestContext TestContext
{
get { return testContextInstance; }
set { testContextInstance = value; }
}
……省略……
[TestMethod]
[DataSource("System.Data.SqlClient", "Data Source=ARCHWAY-TSUNE02;Initial Catalog=MSPetShop4UnitTest;Integrated Security=True", "AddCartTest", DataAccessMethod.Sequential)]
public void カートに商品が追加できるべき()
{
// テスト用テーブルからテスト・データを取得する。
string itemId = (string)TestContext.DataRow["ItemId"];
string productId = (string)TestContext.DataRow["ProductId"];
string name = (string)TestContext.DataRow["Name"];
decimal price = (decimal)TestContext.DataRow["Price"];
int quantity = (int)TestContext.DataRow["Quantity"];
// カートに追加するアイテムを生成する。
CartItemInfo item = new CartItemInfo(
itemId, name, quantity, price,
string.Empty, string.Empty, productId);
// カートにアイテムを追加する。
Cart cart = new Cart();
cart.Add(item);
// テスト用テーブルからテスト・データを取得する。
int count = (int)TestContext.DataRow["Count"];
decimal total = (decimal)TestContext.DataRow["Total"];
// カートのアイテム数量と合計金額を確認する。
Assert.AreEqual<int>(count, cart.Count);
Assert.AreEqual<decimal>(total, cart.Total);
}
}
}
|
|
完成したテスト・クラス |
それでは、データ・ドリブン単体テストを実行してみよう。
Insider.NET 記事ランキング
本日
月間