オープンソースのカバレッジ測定ツール(.NET)の簡単な使い方と、外部ツールに登録して利用する方法を解説します。
VisualStudioはEnterprise版であればカバレッジを測定できますが、料金が高く個人で利用できる値段ではありません。
代替策として、オープンソースで利用できるOpenCover
と、レポート変換ツールReportGenerator
を利用し外部ツールから呼び出せるように設定します。
※下記の方法はexe形式のみを対象としています。Webアプリ(asp.net)を計測するにはIISExpressを使いますが、設定がややこしいので別記事で書きます。
利用ツール
- OpenCover-https://github.com/OpenCover/opencover
- ReportGenerator-https://github.com/danielpalme/ReportGenerator
OpenCoverとReportGeneratorをインストールします
NuGetでインストールします
PM> Install-Package OpenCover
PM> Install-Package ReportGenerator
- Visual Studioで適当なプロジェックトを作り
ツール
メニューからソリューションのNuGetパッケージの管理
を選んでインストールしても大丈夫です(%USERPROFILE%.nuget\packages\にインストールされます)
最低限必要なコマンドラインの説明
OpenCover
引数 | 説明 | 例 |
---|---|---|
-target:<ターゲットパス> | カバレッジ計測対象のexeパス | -target:"C:\TestTarget\bin\Debug\TestTarget.exe" |
-output:<出力ファイル(xml)> | 計測結果を保存するパス(xml) | -output:"C:\TestTarget\bin\Debug\results.xml" |
-register[:user] | プロファイラへの登録で利用するユーザを指定。管理者権限がない場合、userを指定すれば良いようです | -register:user |
-mergeoutput | 指定した場合、前回の出力結果にマージします | -mergeoutput |
ReportGenerator
引数 | 説明 | 例 |
---|---|---|
-reports: | OpenCoverで出力した測定結果ファイル(xml) | -reports:"C:\TestTarget\bin\Debug\results.xml" |
-reporttypes:<出力タイプ> | Html,HtmlInline,MarkdownSummaryなど選択できます | -reporttypes:HtmlInline; |
-targetdir:<出力先> | レポートファイル出力先 | -targetdir:C:\TestTarget\bin\Debug| |
外部ツールへの登録
Visual Studioのツール
⇒外部ツール
で上記ツールを呼び出せるように登録します。
OpenCover
インストールしたOpenCoverのバージョンに合わせて変更してください。
引数 | 説明 |
---|---|
タイトル | OpenCover |
コマンド | %USERPROFILE%.nuget\packages\opencover\4.7.1221\tools\OpenCover.Console.exe |
引数 | -target:"$(TargetPath)" -output:"$(TargetDir)reports.xml" -register:user |
ReportGenerator
インストールしたReportGeneratorのバージョンに合わせて変更してください。
引数 | 説明 |
---|---|
タイトル | ReportGenerator |
コマンド | %USERPROFILE%.nuget\packages\reportgenerator\4.8.10\tools\net47\ReportGenerator.exe |
引数 | -reports:"$(TargetDir)reports.xml" -reporttypes:HtmlInline; -targetdir:"$(TargetDir)" |
実行方法と出力サンプル
- ソリューションエクスプローラーから計測対象のプロジェクトファイルを開いて($(TargetDir)に影響)から、登録したツール(
OpenCover
)を実行します。 - 手動でプログラムを動かします(単体テストのようなイメージで実行すると網羅率が上がります)
- プログラムを終了させた後
ReportGenerator
を実行します。 - 処理完了後、出力先(-targetdir:)に
index.html
ができているので開きます。
出力サンプル
- テスト対象アプリ(四則演算のうち、×、÷のみを実行)
- サマリー
- カバレッジ、複雑度のサマリが表示されます。
- 掛け算、割り算を実行したことがわかります(割り算は通っていない分岐が残っている)。
-
ソース(サマリをスクロールすると表示、キャプチャーの都合で分けています)
- 割り算で0除算の分岐を通っていないことがわかります。