Windowsでのカバレッジ測定
OpenCoverageを使ってみた

2021年1月30日

どもです。
以前、OpenCppCoverageを使用してWindows上でカバレッジ測定する方法のエントリを書きました。
詳細は、下記のエントリを参照して下さい。
Windowsでのカバレッジ測定-OpenCppCoverageを使ってみた(1)
Windowsでのカバレッジ測定-OpenCppCoverageを使ってみた(2)
ところでこのツールと同じようなツールで、"OpenCoverage"というツールがあります。
これは、.NETのアプリケーションのカバレッジを測定するツールです。
今回のエントリでは、このOpenCoverageについて書きます。

0.作業環境

今回の開発環境は、下記の通りです。

VisualStudioのバージョン
VisualStudio VisualStudioCommunity 2019
Version 16.8.3
.NET Framework Version 4.8.04084

1.インストール

OpenCoverageは、VisualStudioのNuGetから取得します。
NuGetパッケージ管理画面において、「OpenCover」と入力します。
その中の「OpenCover」を選択して、インストールします。
OpenCoverage_001
また、カバレッジのレポートを測定する「ReportGenerator」というツールも、同時にインストールしておきます。
コチラも、NuGetで取得ができます。
OpenCoverage_002

2.テストサンプル

今回は、以下のようなクラス/メソッドを対象にした単体テストを例にします。
なお、言語にはC#を選択しています。

2.1.テスト対象の関数

namespace OpenCoverageSample
    {
        public class TestTargetSample
        {
            public int Add(int a, int b)
            {
                return (a + b);
            }
        }
    }

2.2.テストコード

また、これをテストするコードとして、以下のテストコードを適用します。

namespace OpenCoverageSample.Tests
{
    [TestClass()]
    public class TestTargetSampleTests
    {
        [TestMethod()]
        public void AddTest_001()
        {
            var target = new TestTargetSample();

            var res = target.Add(1, 2);

            Assert.AreEqual(3, res);
        }
        [TestMethod()]
        public void AddTest_002()
        {
            var target = new TestTargetSample();

            var res = target.Add(2, 3);

            Assert.AreEqual(5, res);
        }
    }
}

(内容は、ま、テキトーです。)

3.OpenCoverの実行

OpenCoverは、VisualStudio上からは実行できません(でした)。
なので、コマンドライン上から実行します。
しかしながら、OpenCoverに設定する項目が多いので、下記のようなbatファイルを用意します。

@echo off
rem OpenCoverのインストール先
SET OPEN_COVER=E:\development\OpenCoverageSample\packages\OpenCover.4.7.922\tools

rem Report生成ツールのインストール先
SET REPORT_GEN=E:\development\OpenCoverageSample\packages\ReportGenerator.4.5.3\tools\net47

rem テストフレームワークのインストール先
SET MS_TEST=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community

rem ターゲットアセンブリ
SET TARGET_TEST=OpenCoverageSampleTests.dll

rem ターゲットアセンブリの格納先
SET TARGET_TEST_DIR=E:\development\OpenCoverageSample\OpenCoverageSampleTests\bin\Debug

REM カバレッジ計測対象
SET FILTERS=+[OpenCoverageSampleTests*]*

REM パスの設定
SET PATH=%PATH%;%OPEN_COVER%;%MS_TEST%;%REPORT_GEN%

REM OpenCoverを実行
OpenCover.Console -register:user -target:"%MS_TEST%\Common7\IDE\Extensions\TestPlatform\vstest.console.exe" -targetargs:"%TARGET_TEST%" -targetdir:"%TARGET_TEST_DIR%" -filter:"%FILTERS%" -output:result.xml

ここでは、OpenCover.ConsoleがOpenCoverの実行ファイルです。
OpenCoverでは、レポート作成の際に一度テストを実行します。
そのため、作成したテストを実行する方法を指定する必要があります。
VisualStudioで作成したテスト(DLL)は、「vstest.console.exe」を使用してコマンドラインから実行します。
なお、「MSTest.exe」ではテストを実行できません。

4.レポートの生成

OpenCoverでは、カバレッジはXML形式で出力されます。
なので、これをHTML形式に変換します。
変換には、ReportGeneratorを使用します。
使い方は、下記の通りです。

ReportGenerator --reports:result.xml --targetdir:html

これで、HTML形式のレポートが生成されます。
上記のコマンド例では、htmlという名前のディレクトリに生成されます。
このディレクトリのindex.htmlを表示することで、レポートが観られます。
実際のレポートは、こんなカンジです。
OpenCoverage_003
ラインカバレッジ部分は、こんなカンジ。
OpenCoverage_004

5.まとめ

今回は、OpenCoverというカバレッジを測定するツールについて記載しました。
OpenCoverを用いることで、これまで有償でしかできなかったC#でのカバレジ測定が可能になります。

OpenCoverは、VisualStuidで取得できる割に、別途コマンドラインで実行する必要があります。
VisualStudioの中で使うことができません。
そのため、使いにくさは否めません。
そのあたりは、今後の対応に期待です。

ではっ!

ex

OpenCoverに加えて、OpenCoverUIというツールがVisualStudioのMarketplaceで公開されています。
しかし、こちらはVisualStudio2015までしか対応していません。
このツールが、早いとこ新しいVisualStudioに対応することを願います。