本ページでは OpenCover を使った .NET Framework (c#) のソースコードカバレッジ計測の方法について記載します。
OpenCover は、.NET 2 以上(Windows OSのみ - MONOを除く)に対応したコードカバレッジツールです。32ビットと64ビットのプロセスをサポートし、ブランチとシーケンスポイントの両方をカバーします。
OpenCover を実行する対象プロジェクトを作成します。
ここでは以下のようなテストプロジェクトを作成して進めました。
[環境]
コンパイラ : | Visual Studio 2022, | Version 17.8.4 |
開発言語: | c# | |
フレームワーク: | .NET Framework 4.8 | |
テストフレームワーク: | MSTest.TestAdapter, | 3.1.1 |
MSTest.TestFramework, | 3.1.1 | |
NUnit, | 4.0.1 | |
NUnit3TestAdapter, | 4.5.0 | |
OS : | Windows11 home, | 23H2 |
NOTE
上記「テストフレームワーク」に記載の4つを NuGet で登録しました。
代表的な Unit テストフレームワーク(NUnit、MSTestV1、MSTestV2)によるユニットテストを準備してみます。
プロジェクト名 | 内容 |
---|---|
CounterDll | 値(Integer)を管理する class Counter を提供する dll。 class Couter は、Increment, Decrement, Clear 3つのメソッドを持つ。 |
CounterForm | class Counter を使った WinForm アプリ。 |
CounterWPF | class Counter を使った WPF アプリ。 |
testCounter1 | CounterDll をテストする。NUnt 版。 |
testCounter2 | CounterDll をテストする。MSTestV1 版。 |
testCounter3 | CounterDll をテストする。MSTestV2 版。 |
Visual Studio 上の画面の様子です。16個のテストを全て成功しています。
図: CounterForm 画面例
図: CounterWPF 画面例
以上で事前準備を完了です。
NuGet を使って下記2つのパッケージを追加します。
環境情報を以下に記載します。
[環境]
コンパイラ : | Visual Studio 2022, | Version 17.8.4 |
開発言語: | c# | |
フレームワーク: | .NET Framework 4.8 | |
テスト: | MSTest.TestAdapter, | 3.1.1 |
MSTest.TestFramework, | 3.1.1 | |
NUnit, | 4.0.1 | |
NUnit3TestAdapter, | 4.5.0 | |
OpenCover | 4.7.1221 | |
ReportGenerator | 5.2.0 | |
OS : | Windows11 home, | 23H2 |
"OpenCover.Console.exe" から "vstest.console.exe" を実行してテストを実行し、カバレッジ計測を行います。
そして出力されたカバレッジ計測結果を "ReportGenerator.exe" を使って HTML レポートを作成します。
作成したバッチファイル例を記載します。
["OpenCover.bat"]
rem Microsoft Visual Studio 2022 環境設定 call "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\VsDevCmd.bat" rem OpenCoverの実行 .\packages\OpenCover.4.7.1221\tools\OpenCover.Console.exe -register:Path64 -target:"vstest.console.exe" -targetargs:"./testCounter*/bin/debug/testCounter*.dll" -targetdir:"." -filter:"+[CounterDll]*" -output:OpenCoverReport.xml rem OpenCover の出力レポートを整形出力 .\packages\ReportGenerator.5.2.0\tools\net47\ReportGenerator.exe -reports:".\OpenCoverReport.xml" -reporttypes:html -targetdir:".\CoverageReport" rem レポートを表示 .\CoverageReport\index.html pause
パラメータ | 説明 |
---|---|
-target | OpenCover が実行するアプリケーションを指定します。今回は "VSTest.console.exe" を指定しています。 |
-register | "Path64" または "Path32" を指定します。この指定に従って "OpenCover.Console.exe" と同じディレクトリにある {x86/x64}\OpenCover.Profile.dll を使い分けるようです。 |
-targetargs | "-target" で指定したアプリケーションに対する引数を指定します。 上記例では "VSTest.console.exe" の引数としてテストプロジェクトの dll ファイルをワイルドカードを使って指定しています。 |
-targetdir | テストプロジェクトの dll があるディレクトリを指定します。ここで指定した場所からの相対パスで扱われる、と思われるので本例では "." を指定してみました。 |
-returntargetcode | これを指定すると、"-target" で指定したアプリケーションからの戻り値を OpenCover の戻り値として扱います。 |
-output | カバレッジ情報を出力する XML ファイル名を指定します。上記例では "OpenCoverReport.xml" というファイル名を指定しています。 |
-filter | カバレッジ結果にアセンブリとクラスを選択的に含めたり除外したりするために適用するフィルターのリストを指定します。 本例では "CounterDll" というアセンブリに含む全てのクラスを対象として指定しています。 書式については OpenCover の資料 や様々なインターネット記事を参照してください。 |
パラメータ | 説明 |
---|---|
-reports | OpenCover が出力した解析結果(XMLファイル)を指定します。 本ページ例では ".\OpenCoverReport.xml" を指定します。 |
-targetdir | 結果を出力するディレクトリを指定します。 本ページ例では ".\CoverageReport" を指定します。 |
-reporttypes | 出力するレポートタイプを指定します。複数指定することが可能です。 本ページ例では "html" を指定します。 指定できるタイプはとてもたくさんあります。こちら を参照。 |
ReportGenerator に関する参照ページ:
上記バッチファイルを実行した様子の例です。
出力されたレポート例です。
上図のクラス名(赤字部分)をクリックすると、下図のようなカバレッジ詳細を閲覧することができます。
本ページの情報は、特記無い限り下記 MIT ライセンスで提供されます。
2024-01-31 | - | 新規作成 |