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

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

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

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

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

最終更新日 2007 年 10 月 17 日

目標 Visual Studio Team System による単体テスト時のコード カバレッジ計測
使用技術
  • Visual Studio Team System / C#
  • .NET Framework 2.0
取り上げるトピックス
  • 単体テスト - コード カバレッジ
前提知識
関連記事

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

今回は、「その 1 : 単体テストの実施」で作成した ”UTMyLibs” テストプロジェクトを使用し、単体テストにおけるコード網羅状況 (コード カバレッジ) を確認します。

図 1. 単体テスト (コード カバレッジ) を実施するコンポーネント

実装する処理 メソッド 呼び出し対象
商品名取得処理の単体テスト
(該当データなし)
TestGetProductName_Notfound MyComp1.GetProductName
商品在庫数取得処理の単体テスト
(該当データなし)
TestGetProductStocks_Notfound MyComp1.GetProductStocks

その 1 : 単体テストの実施」 にて使用した、サンプル アプリケーション用ソリューション ”MyLibs.sln” を開きます。

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

テスト実行環境を設定し、コード カバレッジを有効にします。

ソリューションエクスプローラにて [ Solution Items ] フォルダを展開し、 [ localtestrun.testrunconfig ] ファイルをダブルクリックします。

[ localtestrun.testrunconfig ] ダイアログボックスの左ペインより [ コード カバレッジ ] を選択し、[ MyLibs.dll ] チェックボックスを [ ON ] にします。

図 2. テスト実行環境の設定

[ 適用 ] - [ 閉じる ] の順番にボタンを押し、元の画面に戻ります。

コード カバレッジが有効な状態で、単体テストを実施し確認します。

メニューより [ テスト ] - [ その他 ] - [ テスト マネージャ ] を選択します。

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

テスト結果表示後、メニューより [ テスト ] - [ ウィンドウ ] - [ コード カバレッジの結果 ] を選択します。

図 3. コード カパレッジの結果

今回テストした 2 つのメソッドともに、カバー済率が 94.74% であることが分かります。

テストで実行したコード (実行パス) を確認します。

[ コード カバレッジの結果 ] ウィンドウから、 [ GetProductStocks ] メソッドをダブルクリックします。

図 4. 実行パスの確認

単体テスト実施にて実行された部分が水色の背景、実行されなかった部分が茶色の背景に色付けされて表示されます。

今回のテストでは、catch ブロックが実行されなかったことが分かります。

カバー済率を上げるため、以下のテストコードを ”UnitTest1” クラスに追加します。

        [TestMethod]
        public void TestGetProductName_Notfound()
        {
            int productId = 999;
            string actual;
            actual = MyLibs.MyComp1.GetProductName(productId);
            Assert.IsNull(actual);
        }

        [TestMethod]
        public void TestGetProductStocks_Notfound()
        {
            int productId = 999;
            int expected = int.MaxValue;
            int actual;
            actual = MyLibs.MyComp1.GetProductStocks(productId);
            Assert.AreEqual(expected, actual);
        }

いずれも存在しない ”ProductID” を指定するので、データベースにデータが存在しないケースのテストが可能となります。

コード カバレッジが有効な状態で、再度単体テストを実施し確認します。

[ テスト マネージャ ] を選択し、Step5 で追加した 2 つのテストメソッドをグループ化するテストリスト [ Test_GetProduct_Notfound ] を作成します。

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

テスト結果表示後、メニューより [ テスト ] - [ ウィンドウ ] - [ コード カバレッジの結果 ] を選択します。

図 5. コード カパレッジの結果

”GetProductStocks” メソッドのカバー済率が 100.00% に上がっていることが分かります。

テストで実行したコード (実行パス) を確認します。

[ コード カバレッジの結果 ] ウィンドウから、 [ GetProductStocks ] メソッドをダブルクリックします。

図 6. 実行パスの確認

”GetProductStocks” メソッドのステートメント (宣言部等除く) は、すべて水色の背景色となり、実装しているコードはすべて単体テストにて網羅されたことが分かります。

次に、「その 3 : 単体テスト - データ駆動テスト」 について説明します。


Top of Page Top of Page

Microsoft