TFS2012 自動ビルドで NUnit テストのカバレッジ結果を OpenCover で計測する #tfsug
TFS2012 自動ビルドでのNUnit テストの結果が OpenCover カバレッジを計測できない(回避策発見) - kaji_3's blog で実現できず困っていましたが、解決したので対応方法をまとめます。
環境
- Windows8
- VisualStudio2012
- TFS2012
- ReportGenerator.1.6(NuGet)
- OpenCover.4.0.804(NuGet)
- NUnit 2.6.1
- TFS2012ビルドサービスのユーザは「TFSBuildUser」を使っている
- TFSBuildUser は Administrators に所属
- Windows8にVisualStudio2012とTFS2012をインストールしている
- 以下のコマンドでレジストリへの登録済み
regsvr32 x86\OpenCover.Profiler.dll regsvr32 x64\OpenCover.Profiler.dll
目的
NUnitのカバレッジを計測したかったのですが Premium を買ってもらうことができないため、OpenCoverを利用します。
前提
自動ビルド終了後に OpenCover を実行するとなぜか以下のようなメッセージが出力されます。
No results - no assemblies that matched the supplied filter were instrumented this could be due to missing PDBs for the assemblies that match the filter please review the output file and refer to the Usage guide (Usage.rtf)
原因は、ビルド後に行うテストによって pdb ファイルが OpenCover で参照できない状態になると推測していますが、ビルドプロセスの「何か」は特定ができていません。
そのため、ビルド直後に OpenCover を実行する処理をビルドプロセスに追加します。
手順
ビルドバッチの作成
前回(NUnit の OpenCover レポートを作成する - kaji_3's blog)作成したものから、ビルドサービス実行ユーザにインストールした OpenCover、ReportGeneratorのインストール先に変更しました。
また、TFSのビルドでバイナリが出力される先でテストを実行するようにしています。
(参考TFSのビルドプロセスにOpenCoverのカバレッジ計測を組み込む(前半) - Yasuo's Notebook)
rem NUnitのインストール先 set nunit_home=C:\Program Files (x86)\NUnit 2.6.1 rem OpenCoverのインストール先 set opencover_home=C:\Users\TFSBuildUser\Documents\Visual Studio 2012\Projects\PhotoShare\packages\OpenCover.4.0.804 rem ReportGeneratorのインストール先 set reportgen_dir=C:\Users\TFSBuildUser\Documents\Visual Studio 2012\Projects\PhotoShare\packages\ReportGenerator.1.6.0.0 rem パスの設定 set path=%path%;%opencover_home%;%reportgen_dir%\ rem 実行するテストのアセンブリ set target_test=PhotoShare.Domain.Tests.dll rem 実行するテストのアセンブリの格納先 set target_dir=C:\Builds\1\KiritoFramework\PhotoShare_MainBuild\Binaries\PhotoShare rem カバレッジ計測対象の指定 set filters=+[PhotoShare*]* rem カレントディレクトリをアセンブリの場所に移動 cd %target_dir% rem OpenCoverの実行 OpenCover.Console -register:user -target:"%nunit_home%\bin\nunit-console.exe" -targetargs:"/nologo %target_test%" -output:result.xml -mergebyhash -filter:"%filters%" rem レポートの生成 ReportGenerator "result.xml" html
ビルドプロセスの編集
ビルドプロセスの編集方法の詳細が乗っているのでそちらを。。
TFSのビルドプロセスにOpenCoverのカバレッジ計測を組み込む(後半) - Yasuo's Notebook
OpenCover実行プロセスの追加
前提に記述した事が原因で、ビルド、テストの最後にOpenCoverを実行するとエラーになります。そのため追加する場所をビルド直後にします。
具体的には、
- コンパイルとテスト
- プロジェクトのコンパイルを試す
- プロジェクトのコンパイル
- プロジェクトに MSBuild を実行する
- プロジェクトのコンパイル
- プロジェクトのコンパイルを試す
の直下にしてください。こんな感じで。
ビルドサービスで実行
「実行するテストのアセンブリの格納先」のフォルダにレポートが作成されます。