もくじ
https://tera1707.com/entry/2022/02/06/144447
やったこと
必要パッケージを入れる
まずnugetでUTのプロジェクトに下記のパッケージを入れる。
- ReportGenerator.4.8.7
- OpenCover.4.7.922
※バージョンはほかのVerでもよいと思われる。今回は上記で実施。
バッチファイルを作成
下記のようなバッチファイルを作成し、ソリューションのフォルダの中に置く。
set MSTEST="C:\Program Files (x86)\Microsoft Visual Studio\2019\TestAgent\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe"
rem OpenCover のインストール先
set OPENCOVER="..\src\packages\OpenCover.4.7.922\tools\OpenCover.Console.exe"
rem ReportGenerator のインストール先
set REPORTGEN="..\src\packages\ReportGenerator.4.8.7\tools\net47\ReportGenerator.exe"
rem 実行するテストのアセンブリ
set TARGET_TEST="UniTest.dll"
rem 実行するテストのアセンブリの格納先
set TARGET_DIR="..\src\UniTest\bin\x64\Debug"
rem カバレッジ計測対象の指定
set FILTERS="+[*]* -[UniTest*]*"
rem 除外する属性(Attribute)
set EXCLUDE_ATTR="*.ExcludeFromCodeCoverage*"
rem OpenCover の出力ファイル
set OUTPUT="coverage.xml"
%OPENCOVER% -register -target:%MSTEST% -targetargs:%TARGET_TEST% -targetdir:%TARGET_DIR% -filter:%FILTERS% -excludebyattribute:%EXCLUDE_ATTR% -output:%OUTPUT% -log:Info
rem レポートの生成 (xml から html へ変換)
echo htmlレポート作成します
%REPORTGEN% -reports:%OUTPUT% -targetdir:%OUTPUT_DIR%
注意
上記を試した時点では、.NET Frameworkで試していて、パッケージの管理形式がPackage.config
だった。
なので、ソリューションのフォルダの中にPackageフォルダができて、その中にnugetしたもの一式が入っていた。
そのため、nugetしたexeの保存場所を示す、バッチ中のOPENCOVER
やREPORTGEN
が、相対パスで、ソリューションのフォルダの中の各exeを指すようになっている。
が、おそらく今の.NET6(2023年4月)時点では、パッケージの管理形式が「PackageReference」が主流だと思うので、その場合はnugetしたexe達は、ソリューションの中ではなく全ソリューション共通で、ユーザーのフォルダの下記のようなパスに入ると思われる。
C:\Users\masa\.nuget\packages\パッケージ名・・・
その場合は、OPENCOVER
やREPORTGEN
を、PackageReferenceに合うようにフォルダパスを書くこと。
参考
下記を参考にさせて頂いた。(バッチの書き方等)
計測対象をFILTERSパラメータで絞る方法など
C0,C1,C2とか
OpenCoverはC1:分岐網羅率カバレッジらしい。(条件分岐に注目して、条件式のすべての組み合わせをテストするカバレージのこと)