もなかアイスの試食品

「とりあえずやってみたい」そんな気持ちが先走りすぎて挫折が多い私のメモ書きみたいなものです.

OpenCover&ReportGeneratorでカバレッジテスト

クラスライブラリを作ってみたり,Nunitでテストを少しするようになって,「カバレッジ」という単語をちらほら見かけるようになりました

残念ながら,カバレッジについて全然知らなかった私です

調べてみて,カバレッジテストカッコイイ(?)とか思ってしました

カバレッジテストに関する参考になるサイトを探してみたのですが,以前無料のソフトが有料になってたり,64bit環境では動かなかったりで,思った以上に引っかかりませんでした・・・

そこで,私の環境(Windows7 64bit)で動いた「OpenCover」というツールについて,わかってることをまとめφ(・・ )メモメモ


OpenCoverとReportGeneratorをダウンロードします

OpenCover=>リンク
ReportGenerator=>リンク

OpenCoverのダウンロードは「ZIP」のボタンをクリックします

OpenCoverで使うパラメータは
-target・・・テスト対象のアプリケーション

  • targetdir・・・アプリケーションのディレクトリ
  • targetargs・・・テストアプリケーションに渡す引数
  • output・・・出力ファイル
  • filter・・・テストする名前空間やらクラス名の指定

他のパラメータはダウンロードしたファイル内にあるドキュメントや,コマンドラインでパラメータ無しで実行した時に確認することができます

今回のテストアプリケーションのソースファイル(プロジェクト名:AppCoverageTestEx)

namespace AppCoverageTestEx
{
    class Program
    {
        private const string PARA1 = "para1";
        private const string PARA2 = "para2";
 
        /// ---------------------------------------------------------------------------------------
        /// <summary>
        /// エントリポイント</summary>
        /// <param name=&quot;args&quot;>
        /// プログラム起動時の引数</param>
        /// ---------------------------------------------------------------------------------------
        static void Main(string[] args)
        {
            CoverageTestClass testClass = new CoverageTestClass();
 
            switch (args[0]) {
                case PARA1:
                    testClass.Sub1();   // 引数がpara1の時
                    break;
 
                case PARA2:
                    testClass.Sub2();   // 引数がpara2の時
                    break;
 
                default:
                    break;
            }
 
            testClass.Sub3();
        }
    }
 
    /// ---------------------------------------------------------------------------------------
    /// <summary>
    /// カバレッジテスト用クラス</summary>
    /// ---------------------------------------------------------------------------------------
    class CoverageTestClass
    {
        /// <summary>
        /// フラグ</summary>
        public bool SetFlag { private get; set; }
 
        /// <summary>
        /// コンストラクタ</summary>
        public CoverageTestClass()
        {
            this.SetFlag = false;
        }
 
        /// <summary>
        /// メソッド1</summary>
        public int Sub1()
        {
            return 0;
        }
 
        /// <summary>
        /// メソッド2</summary>
        public int Sub2()
        {
            return 0;
        }
 
        /// <summary>
        /// メソッド3</summary>
        public int Sub3()
        {
            if (this.SetFlag == true) {
                return 0;
            }
            else {
                return 0;
            }
        }
 
    }
}

テストするアプリケーションもできたことなので,実際に使ってみます

プログラムのプロジェクトファイル,OpenCoverのダウンロードファイルをCドライブの直下に配置しています

C:\>opencover\OpenCover.Console.exe

  • target:C:\AppCoverageTestEx\AppCoverageTestEx\bin\Debug\AppCoverageTestEx.exe
  • targetdir:C:\AppCoverageTestEx\AppCoverageTestEx\bin\Debug
  • targetargs:para1
  • filter:+[AppCoverageTestEx]*
  • register:user

「-output:」を指定していないので,カレントディレクトリに「result.xml」というファイルが作成されます

※パラメータ「-filter」について

  1. [アセンブリ名・プロジェクト名](名前空間.)クラス名・・・解析範囲に追加

ワイルドカード

※パラメータ「-register:user」について
これがないとファイルが出力されません・・・管理者アカウントがどうとか・・・実はよくわかりません



結果(result.xml)をReportGeneratorを使ってわかりやすくします

コマンドラインを使って以下のパラメータで実行します

C:\>ReportGenerator\bin\ReportGenerator.exe results.xml html

html内にresults.xmlで作成された解析結果を得ることができます

結果がこちら

20134375049.jpg

下の表のクラス名にはリンクが貼られており,その先にはソースまで表示され,どこが実行されたか確認できます

コマンドラインで操作するのは面倒くさいので,いつかGUIで操作できるようにしようと思います

Part Cover 紹介 その1 - Part Cover browser から テストコード(NUnit)のカバレッジを取得する - お だ のスペースPart Cover 紹介 その1 - Part Cover browser から テストコード(NUnit)のカバレッジを取得する - お だ のスペース

.NET のカバレッジツールについて紹介します。Visual Studioでもテストコードのカバレッジが測定出来るようですが、Team Edition じゃない...

.NETでのカバレッジ計測ツールOpenCover - Yasuo's Notebook.NETでのカバレッジ計測ツールOpenCover - Yasuo's Notebook

2011年のうちに記事を書こうと思います。C#で開発する際のカバレッジ測定ツールとしては、NCoverやPartCoverが有名ですが、今回はOpenCover...