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="args"> /// プログラム起動時の引数</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」について
はワイルドカード
※パラメータ「-register:user」について
これがないとファイルが出力されません・・・管理者アカウントがどうとか・・・実はよくわかりません
結果(result.xml)をReportGeneratorを使ってわかりやすくします
コマンドラインを使って以下のパラメータで実行します
C:\>ReportGenerator\bin\ReportGenerator.exe results.xml html
html内にresults.xmlで作成された解析結果を得ることができます
結果がこちら
下の表のクラス名にはリンクが貼られており,その先にはソースまで表示され,どこが実行されたか確認できます
コマンドラインで操作するのは面倒くさいので,いつかGUIで操作できるようにしようと思います
.NET のカバレッジツールについて紹介します。Visual Studioでもテストコードのカバレッジが測定出来るようですが、Team Edition じゃない...
2011年のうちに記事を書こうと思います。C#で開発する際のカバレッジ測定ツールとしては、NCoverやPartCoverが有名ですが、今回はOpenCover...