Silverlight をインストールするには、ここをクリックします*
Japan変更|すべてのMicrosoft のサイト|サインイン
MSDN
|MSDN ライブラリ|デベロッパー センター|ダウンロード情報|開発ツール製品|コミュニティ|ご意見・ご要望|サイトマップ
MSDN Home > ステップ 7 > Visual Studio 2005 Team System によるアプリケーション品質の向上 > その 3 - 単体テストの実施 : データ駆動テスト

ステップ 7 ハンズオン 「Visual Studio 2005 Team System によるアプリケーション品質の向上」

第 3 回 品質の高いコード作成 (2) - その 3

単体テストの実施 - データ駆動テスト

NRI ラーニングネットワーク
荒木 達也

最終更新日 2007 年 10 月 17 日

目標 Visual Studio Team System によるデータ駆動単体テストの実施
使用技術
  • Visual Studio Team System / C#
  • .NET Framework 2.0
取り上げるトピックス
  • 単体テスト - データ駆動テスト
前提知識
関連記事

単体テスト - コード カバレッジ

今回は、「その 2 : 単体テストの実施 - コード カバレッジ」 で作成した ”UTMyLibs” テストプロジェクトを修正し、SQL Server に存在するテストデータを参照する単体テストを実施します。

図 1. 単体テスト (データ駆動) を実施するコンポーネント

実装する処理 メソッド 呼び出し対象
商品名取得処理の単体テスト
(データ駆動テストへ変更)
TestGetProductName MyComp1.GetProductName
商品在庫数取得処理の単体テスト
(データ駆動テストへ変更)
TestGetProductStocks MyComp1.GetProductStocks

なお、今回のテストで利用するテストデータは、SQL Server に以下のよう構成で作成しておきます。

  • データベース名 : TESTDB
  • テーブル名 : TESTTBL
    • フィールド名 : ProductID [int]
    • フィールド名 : ProductName [varchar(40)]
    • フィールド名 : UnitsInStock [smallint]

※なおテストデータは、元となる ”NortthWind” データベースからコピーしておきます。

その 2 : 単体テストの実施 - コード カバレッジ」 にて使用した、 サンプル アプリケーション用ソリューション ”UTMyLibs” を開きます。

Visual Studio 2005 を起動し、メニューより [ ファイル ] - [ 開く ] - [ プロジェクト/ソリューション ] の順に選択後、対象のソリューションファイル ”MyLibs.sln” を開きます。

テストコードを修正し、データ駆動テストが実施できる状態にします。

[ UTMyLibs ] テストプロジェクトに [ Systsem.Data ] アセンブリの参照設定を追加し [ UnitTest1 ] クラスの宣言部に、using 句を追加します。

 using System.Data;

また、[ TestGetProductName ] メソッドを以下のように変更します。

   [TestMethod]
   [DataSource("System.Data.SqlClient", 
   "Data Source=.\\sqlexpress;Initial Catalog=TESTDB;Integrated Security=True",
   "TESTTBL", DataAccessMethod.Sequential)]
   public void TestGetProductName()
   {
       int productId = (int)TestContext.DataRow["ProductID"];
       string expected = (string)TestContext.DataRow["ProductName"];
       string actual;
       actual = MyLibs.MyComp1.GetProductName(productId);
       Assert.AreEqual(expected, actual);
   }

※テストメソッドの ”DataSource” 属性は、コードでの指定だけではなく、テスト マネージャのプロパティ ウィンドウからも設定可能です。

図 2. テスト マネージャ でのDataSouce 設定

データ駆動テストを実施します。

メニューより [ テスト ] - [ ウィンドウ ] - [ テスト マネージャ ] を選択します。

テストリスト [ Test_GetProduct ] チェックボックスだけを [ ON ] にし、[ テスト マネージャ ] ウィンドウのツールバーより [ 選択されたテストを実行 ] ボタンをクリックします。

テスト結果が表示されます。

図 3. データ駆動テストの結果

”テスト結果” ウィンドウのツールバーの下に、”結果:成功 79/79” と表示されています。

表示されている 2 件テスト結果以外に、77 件のテスト結果が存在することが分かります。

データ駆動テストの詳細を確認します。

[ テスト結果 ] ウィンドウから、成功しているテスト [ TestGetProductName ] をダブルクリックします。

図 4. データ駆動テストの結果 - 詳細

”データ ドリブン テスト結果” から、テストデータ 1 件につき 1 回のテストを実施し、それぞれのテスト結果が成功であることが分かります。

※今回のデータ駆動テストで利用したテストデータには、テスト失敗になるデータが存在しませんでした。そのため全体 77 件中、成功は 77 件、失敗が 0 件となりました。

もうひとつのメソッドをデータ駆動テストが実施できる状態にします。

”TestGetProductStocks” メソッドを以下のように変更します。

   [TestMethod]
   [DataSource("System.Data.SqlClient",
   "Data Source=.\\sqlexpress;Initial Catalog=TESTDB;Integrated Security=True",
   "TESTTBL", DataAccessMethod.Sequential)]
   public void TestGetProductStocks()
   {
        int productId = (int)TestContext.DataRow["ProductID"];
        int expected = (System.Int16)TestContext.DataRow["UnitsInStock"];
        int actual;
       actual = MyLibs.MyComp1.GetProductStocks(productId);
       Assert.AreEqual(expected, actual);
    } 

データ駆動テストを実施します。

メニューより [ テスト ] - [ ウィンドウ ] - [ テスト マネージャ ] を選択します。

テストリスト [ Test_GetProduct ] チェックボックスだけを [ ON ] にし、[ テスト マネージャ ] ウィンドウのツールバーより [ 選択されたテストを実行 ] ボタンをクリックします。

テスト結果が表示されます。

図 5. データ駆動テストの結果

”テスト結果” ウィンドウのツールバーの下に、”結果:成功 148/156” と表示されています。

表示されている 2 件のテスト結果では、”TestGetProductStocks” がテストを失敗しています。

データ駆動テストの詳細を確認します。

[ テスト結果 ] ウィンドウから、失敗しているテスト [ TestGetProductStocks ] をダブルクリックします。

図 6. データ駆動テストの結果 - 詳細

”データ ドリブン テスト結果” から、”データ行 : 9” でテストが失敗しています。期待した在庫数は ”0” ですが、実際は ”31” が返ってきたため、テストは失敗と見なされています。

※今回のデータ駆動テストで利用したテストデータには、あえてテストが失敗するデータを 7 件設定しました。そのため全体 77 件中、成功は 70 件、失敗が 7 件となりました。


Top of Page Top of Page

Microsoft