結論
OpenCover VB.NET
とかでググってもぜんぜん事例が出てこないので心配になるが、OpenCoverでVB.NETのコードカバレッジも取れる。ちゃんと行単位でのC1 coverage(branch coverage, 分岐網羅)も取れる。Coverletと違って、C1が100%実行されていないのに100%と表示されてしまうといった問題もなく、便利に使えそう。
手順
手元の環境ではなぜかInstall-Package
でOpenCoverがインストールできなかったので、nugetのOpenCoverのページからOpenCoverのnupkgファイルをダウンロードしてきて、管理者権限のあるPowerShellコンソールから以下のコマンドでインストールした。
Install-Package OpenCover -Source .\
そのうえで、
satob.hatenablog.com
で作成したテスト対象のプログラムを
docs.microsoft.com
に記載の手順で作ったテスト用プロジェクトXUnit.OpenCover.Collector
から参照させる。またXUnit.OpenCover.sln
を、作成し、XUnit.OpenCover.Collector
とテスト対象のプロジェクト両方を追加する。そのうえで
kuttsun.blogspot.com
に記載の「.NET Core + xUnit の場合」に記載の手順に従い、以下のようにコマンドを実行。-filter
でカバレッジ取得対象の名前空間を絞っておかないと、coverage.xml
が数MBのサイズになってしまう(関係ないDLLのカバレッジも取得してしまう模様)。
C:\Program` Files\PackageManagement\NuGet\Packages\OpenCover.4.7.1221\tools\OpenCover.Console.exe -register:user -target:"dotnet.exe" -targetargs:"test .\XUnit.OpenCover.Collector\XUnit.OpenCover.Collector.csproj" -filter:"+[myApp*]*" -oldstyle -output:"coverage.OpenCover.xml"
出力されたcoverage.xml
に対して
reportgenerator.exe -reports:.\coverage.OpenCover.xml -targetdir:OpenCover
を実行すると、OpenCover
フォルダ以下にHTMLファイルが出力される。
コードおよび結果
テストクラスの内容はCoverletのときに使ったものと同じ。得られたXMLのレポートファイルは以下。
OpenCover VB.NET coverage result · GitHub
評価
結果、VB.NETのプログラムのカバレージも取得できた。

- 31行目のC1は1 of 2 branches are coveredとなっており、行単位でbranch coveredが取得できていることを意味する。JaCoCoのように、Branches (C1 Coverage)が取れると言っておきながら、実際には条件網羅(condition coverage, C2)しか取れないということはない。
- そのうえで、Coverletと異なり、23行目や35行目のC1(真のルートしか通っていない)が正しく1 of 2 branches are coveredとなっている。また、44行目からの条件分岐で通っていないケース(x=10, y=10のような)も50行目のC1に反映されている。
- 25行目と37行目が、1回しか実行していないのに2 visitsになっているのはCoverletと同じ。