アプリのコードがだいぶ増えてきて、それに伴いテストコードも増えてきた。 いい加減そろそろテストを書いていないメソッドの把握が難しくなってきたところだ。 コードカバレッジを計測する頃合かもしれない。
プライベートプロジェクトなので、開発は 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 のレポートを出力できるようになった。