ステップ 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 : 単体テスト - データ駆動テスト 」 について説明します。