OpenCover を使ってコードカバレッジを計測したメモ

アプリのコードがだいぶ増えてきて、それに伴いテストコードも増えてきた。 いい加減そろそろテストを書いていないメソッドの把握が難しくなってきたところだ。 コードカバレッジを計測する頃合かもしれない。

プライベートプロジェクトなので、開発は Visual Studio 2015 Community Edition を使っている。 Visual Studio のコードカバレッジ機能は Enterprise Edition じゃないと使えない。 OSS のツールを探さないといけないな。

.NET 用で使える OSS のコードカバレッジツールだと PartCover が良く検索に引っかかってくるが、 オリジナルは開発が止まっているみたいだった。 オリジナルからフォークした partcover.net4 と、別ツールの OpenCover の 2 つが紹介してあったので、 今回は OpenCover を使うことにする。

OpenCover が出力するコードカバレッジのレポートは XML ファイルなので人が読むのはツライ。 読みやすいレポートに変換してくれる ReportGenerator というツールと組み合わせるのが良い。

あとは下記のような内容のバッチファイルを作成(プロジェクト名は適当)。

REM OpenCoverのインストール先
SET OPENCOVER_HOME=C:\Applications\opencover

REM レポート生成ツールのインストール先
SET REPORTGEN_DIR=C:\Applications\ReportGenerator

REM VS2015のインストール先
SET VS2015_HOME=C:\Program Files\Microsoft Visual Studio 14.0

REM 実行するテストのアセンブリ
SET TARGET_TEST=MyWebApp.Tests.dll

REM 実行するテストのアセンブリの格納先
SET TARGET_DIR=C:\Projects\MyWebApp\MyWebApp.Tests\bin\Debug

REM カバレッジ計測対象の指定
SET FILTERS=+[MyWebApp*]*

REM パスの設定
SET PATH=%PATH%;%OPENCOVER_HOME%;%REPORTGEN_DIR%\bin;

REM OpenCoverの実行
OpenCover.Console -register:user -target:"%VS2015_HOME%\Common7\ide\mstest.exe" -targetargs:"/noisolation /testcontainer:

%TARGET_TEST%"  -targetdir:"%TARGET_DIR%" -filter:"%FILTERS%" -output:result.xml -mergebyhash

REM レポートの生成
ReportGenerator "result.xml" .\html

ダブルクリック一発で、MSTest のテストを実行しつつコードカバレッジを計測し、 HTML のレポートを出力できるようになった。