コマンドラインツールによるカバレッジ分析
dotCover コマンドラインツールを使用すると、次のことが可能になります。
任意のテストランナー(MSTest、NUnit、xUnit、MSpec など)を使用してカバレッジ分析を実行し、実行されたテストのカバレッジをカバレッジスナップショットに記録します。
マージコマンドを使用してカバレッジスナップショットをマージします。たとえば、異なるテストフレームワークを使用するユニットテストのスナップショットを結合します。
レポートコマンドを使用して、さまざまな形式でカバレッジレポートを生成します。
このツールは、Windows (x86、x64、arm64)、Linux (x64、arm32、arm64、musl-x64、musl-arm64)、macOS (x64、arm64) で使用できます。
Distribution format
The tool is distributed as a cross-platform framework-dependent .NET tool (requires .NET to be installed). View NuGet package(英語)
dotCover コマンドラインツールをインストールする
The main way to install the dotCover command-line tool is to install it as a .NET tool. It's recommended if you want to run coverage analysis locally on your computer or a CI/CD server.
Install dotCover as a global tool for all projects on the computer
実行:
dotnet tool install --global JetBrains.dotCover.CommandLineTools
Install dotCover as a local tool for a specific project/directory
実行:
dotnet tool install JetBrains.dotCover.CommandLineTools --tool-path "some/path"
After the installation, you can run the command-line tool from any directory (if installed globally) or from the directory where it was installed (if installed locally) using the dotCover
command. For example:
dotCover コマンドラインツールを構成する
dotCover コマンドラインツールは、コマンドラインパラメーターまたは XML 構成ファイルを使用して構成できます。両方のアプローチを同時に使用できます。競合が発生した場合、コマンドラインパラメーターは XML で指定されたパラメーターをオーバーライドします。
例:
Regardless of the OS, you can use the same parameter syntax, e.g.,
--TargetExecutable MyApp.exe
Command-line parameters are case-insensitive. E.g., the following is equal:
--TargetExecutable MyApp.exe
and--targetexecutable MyApp.exe
To specify a parameter, use a double hyphen
--
, e.g.,--TargetExecutable MyApp.exe
.To specify a parameter value, use a space
after the parameter name, e.g.,
--TargetExecutable MyApp.exe
.If a parameter value is a path with spaces, escape them with additional double quotes and a backslash, e.g.,
... --targetArguments "\"D:\My Projects\My Application\bin\Debug\AppTests.dll"\"
コマンドラインパラメーターの相対パスは、コマンドラインツールの作業ディレクトリを基準にして処理されます。
If you omit the
ReportType
parameter, the tool will generate a coverage snapshot instead of a report.パラメーターの完全なリストについては、「コマンドリファレンス」を参照してください。
すべての dotCover コマンド ( version
および help
を除く) は、XML 構成ファイルでパラメーターを受け入れることができます。構成ファイルは、すべてのパラメーターをインラインで指定したり、バッチファイルで指定したりする代わりに使用できます。サポートされている XML タグでのエラーを回避するには、最初に構成スタブファイルを生成し、次にカスタムパラメーター値を指定することをお勧めします。
スタブ構成ファイルを生成するには
実行:
dotCover help <command name> <configuration stub file>例:
cover-dotnet
の場合:dotCover help cover-dotnet C:\Temp\MyConfig.xml
設定ファイルに基づいてカバレッジ分析を実行するには
カスタムパラメーター値を含む構成ファイルを dotCover コマンドに提供します。例:
cover-dotnet
の場合:dotCover cover-dotnet C:\Temp\MyConfig.xmlXML 構成ファイルで定義された相対パスは、このファイルの場所を基準として扱われます。
.NET プロジェクトの単体テストカバレッジを分析する
ソリューションフォルダーを開きます。
ソリューションを構築します。
dotnet buildRun tests with coverage analysis and get a coverage snapshot:
dotCover cover-dotnet --output snapshot.dcvr -- test --no-buildTo get a report instead of a snapshot, use the
--ReportType
parameter:dotCover cover-dotnet --output report.xml --ReportType XML -- testXML ファイルを使用して
dotCover
を構成し、それを引き続き使用する場合は、ファイルへのパスを指定します。dotCover cover-dotnet "C:\config\config.xml" -- test
.NET フレームワークプロジェクトの単体テストカバレッジを分析する
次の手順は、.NET フレームワークプロジェクトでコマンドラインツールを使用してカバレッジを実行する最も単純なケースを示しています。
ユニットテストプロジェクトがビルドされていることを確認してください。
実行:
dotCover cover --targetExecutable "D:\Program Files\NUnit 2.6\bin\nunit-console.exe" --targetArguments "D:\Projects\TheApplication\bin\Debug\AppTests.dll" --output AppCoverageReport.html --reportType HTMLここに:
--targetExecutable
は、単体テストフレームワークランナーへのパスです。--targetArguments
はランナー(コンパイルされたユニットテストアセンブリ)に渡される引数です。これらの引数にスペースを含むパスが含まれている場合は、二重引用符とバックスラッシュを追加してエスケープする必要があります(例:... --targetArguments "\"D:\My Projects\My Application\bin\Debug\AppTests.dll"\"
)。--output
はレポートのファイル名です--reportType
はレポートのタイプです (この場合、HTML レポートを生成します)
On completion, the tool will generate the
AppCoverageReport.html
file in the same directory where it is located. Open this file to view the coverage results in a browser.
カバレッジフィルターを適用する
カバレッジレポートに、必要のない情報が含まれているとします。その場合、フィルターを適用して、カバレッジレポートに何を含めるか、何を除外するかをコマンドラインツールに指示することができます。
包含フィルターと除外フィルターは任意の順序で指定できます。
順序に関係なく、コマンドラインツールは最初に「含める」フィルターを適用し、次に「除外する」フィルターを適用します。
「含める」フィルターが明示的に指定されていない場合、ツールは最初にすべてを含め、次に「除外」フィルターで指定されたものを除外します。
「include」フィルターがある場合、コマンドラインツールは最初に「include」フィルターに一致しないものをすべて除外し、次に明示的な「exclude」フィルター (存在する場合) を適用します。
デフォルトでは、「除外」フィルターを指定したかどうかに関係なく、コマンドラインツールはシステムアセンブリに対して次のフィルターを追加します:
mscorlib
、System
、System.*
、Microsoft .*
必要に応じて、これらのデフォルトフィルターを
--disableDefaultFilters
コマンドラインパラメーターで無効にすることができます。
カバレッジフィルターを指定するには、コマンドラインパラメーターを使用する方法と XML 構成ファイルを使用する方法の 2 つがあります。
カバレッジ分析から項目を除外 / 含めるには、
--filters
パラメーターを指定してコマンドラインツールを実行する必要があります。例: (簡潔にするために、フィルター以外のパラメーターは省略します):dotCover ... --filters -:module AdditionalTests;-:type MainTests.Unit*; -:type MainTests.IntegrationTests;function TestFeature1;この例は、XML 構成例と同等です。セミコロン (;) はフィルターエントリだけでなく、フィルターエントリ内の項目も区切ることに注意してください。
-:
で始まるエントリは、+:
で始まるエントリを除外します(その逆もあります)。モジュールのみを除外 / インクルードする必要がある場合は、
module
キーワードを省略できます。dotCover ... --filters -:AdditionalTests;それらの属性に基づいてクラスとメソッドを除外するには、
--attributeFilters
パラメーターを使用する必要があります。例:System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute
属性でマークされたメソッドをフィルターにかける:dotCover ... --attributeFilters System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute;セミコロン (
;
) は区切り文字として機能します。
特定のエンティティ (モジュール、クラス、メソッド) をカバレッジレポートから除外し、他のエンティティを保持するには、対応するエントリを
ExcludeFilters
ノードに追加します。例:... <Filters> <ExcludeFilters> <FilterEntry> <ModuleMask>AdditionalTests</ModuleMask> </FilterEntry> <FilterEntry> <ClassMask>MainTests.Unit*</ClassMask> </FilterEntry> <FilterEntry> <ClassMask>MainTests.IntegrationTests</ClassMask> <FunctionMask>TestFeature1</FunctionMask> </FilterEntry> </ExcludeFilters> </Filters>ここに:
<ModuleMask>AdditionalTests</ModuleMask>
- 対応するモジュールからのすべてのテストは除外されます。ここAdditionalTests
は拡張子のないアセンブリ名です。<ClassMask>MainTests.Unit*</ClassMask>
- 名前がMainTests.Unit
で始まるすべてのクラスが除外されます。<ClassMask>MainTests.IntegrationTests</ClassMask> <FunctionMask>TestFeature1</FunctionMask>
-MainTests.IntegrationTests
クラスのTestFeature1
メソッドは除外されます。FunctionMask
は常にメソッドのショートネームを含まなければならないことに注意してください。FilterEntry
の要素を省略すると、dotCover はこれをワイルドカードと見なします。例: この特別な場合にClassMask
を削除すると、dotCover はすべてのTestFeature1
メソッド(すべてのモジュールとクラスに属する)を除外します。
または、同じ種類の他のすべてを除外しながら、目的の項目のみを含めるには、
IncludeFilters
ノードに対応するエントリを追加します。もう 1 つのオプションは、属性に基づいてクラスとメソッドをフィルターすることです。例:
System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute
属性でマークされたメソッドをフィルターするには、coverage.xml 構成ファイルに次のコードを追加します。... <AttributeFilters> <AttributeFilterEntry> <ClassMask>System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute</ClassMask> </AttributeFilterEntry> </AttributeFilters>
カバレッジ結果の範囲を変更する
デフォルトでは、カバレッジスナップショットの準備ができると、分析用に読み込まれたアセンブリ、つまりフィルター処理されずにテストがあるアセンブリに関する情報のみが含まれます。これにより、全体のカバレッジパーセンテージが不正確になる可能性があります。
必要に応じて、情報をスナップショットに追加する必要があるアセンブリの範囲を変更することができます。これを行うには、Scope
パラメーターを使用します。例: プロジェクトのすべてのアセンブリをスナップショットに追加するには、以下を構成ファイルに追加します。
フィルターで除外されたものはすべて、指定されたスコープに関係なく除外されます。
Analyze coverage for multiple test projects
If there are several unit test projects in your solution, you can run coverage analysis for all of them at once as described in the basic scenario. In this case, to avoid specifying the full path to each assembly, you can use the TargetWorkingDir
parameter when specifying test assemblies. For example, with an XML config file:
ただし、単体テストプロジェクトが異なる単体テストフレームワークを使用している場合、このアプローチは機能しません。このような場合、カバレッジ、マージ、レポートを個別のステップに分割できます。
MSTest を使用する TestProject1
と NUnit を使用する TestProject2
という 2 つの単体テストプロジェクトがあるとします。両方のプロジェクトでカバレッジを実行し、単一のレポートを取得するには、次の手順を実行します。

複数のプロジェクトのカバレッジを個別のステップで実行する
各テストプロジェクトでカバー (c) コマンドを実行するための 2 つの構成ファイルを作成します。MSTest を使用する
TestProject1
の場合は testProject1.xml です。<?xml version="1.0" encoding="utf-8"?> <CoverageParams> <TargetExecutable>C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\MSTest.exe</TargetExecutable> <TargetArguments>TestProject1.dll</TargetArguments> <TargetWorkingDir>D:\Projects\TheApplication\bin\Debug</TargetWorkingDir> <Output>Snapshot1.dcvr</Output> </CoverageParams>NUnit を使用する
TestProject2
の場合は testProject2.xml:<?xml version="1.0" encoding="utf-8"?> <CoverageParams> <TargetExecutable>D:\Program Files\NUnit 2.6\bin\nunit-console.exe</TargetExecutable> <TargetArguments>TestProject2.dll</TargetArguments> <TargetWorkingDir>D:\Projects\TheApplication\bin\Debug</TargetWorkingDir> <Output>Snapshot2.dcvr</Output> </CoverageParams>Run the
cover (c)
(orcover-dotnet
for .NET projects) command on each of the test projects using the prepared configuration files:dotCover cover testProject1.xml
anddotCover cover testProject2.xml
. As a result, you will get two coverage snapshots,Snapshot1.dcvr
andSnapshot2.dcvr
.マージ (m) コマンドを実行して、両方のスナップショットをマージします。
dotCover merge merge.xmlここで、merge.xml は構成ファイルです。
<?xml version="1.0" encoding="utf-8"?> <MergeParams> <Source>Snapshot1.dcvr</Source> <Source>Snapshot2.dcvr</Source> <Output>MergedSnapshots.dcvr</Output> </MergeParams>マージされたスナップショットから HTML テストレポートを作成するには、報告する (r) コマンドを実行します
dotCover report report.xmlここで、report.xml は構成ファイルです。
<?xml version="1.0" encoding="utf-8"?> <ReportParams> <Source>MergedSnapshots.dcvr</Source> <Output>CoverageReport.html</Output> <ReportType>html</ReportType> </ReportParams>
シンボルファイルを検索する (PDB)
対象バイナリのシンボルファイル(PDB)を見つけることは、カバレッジを計算するために不可欠です。単体テストやスタートアッププロジェクトをカバーする場合、dotCover は現在のソリューションの構造を使用してシンボルファイルを簡単に見つけます。
デフォルトでは、次の場所にあるシンボルファイルを検索します。
バイナリファイルが存在するディレクトリと同じディレクトリにあります。
バイナリファイル内で指定されたデバッグディレクトリ内 ;
_NT_SYMBOL_PATH
環境変数とレジストリで指定されたすべてのディレクトリ
必要に応じて、シンボルファイルを検索する他の場所を指定できます。これを行うには、cover または cover-dotnet コマンドを使用するときに次のパラメーターを使用します。
SymbolSearchPaths
パラメーターを使用して、シンボルファイルを検索するためのパスのセミコロンで区切られたリストを指定します。各パスは、ディレクトリパスまたはシンボルサーバーパス (例: srv*C:\LocalSymbols*http://symbolserver:33417/) のいずれかになります。AllowSymbolServerAccess
パラメーターを使用して、SymbolSearchPaths
パラメーターまたは_NT_SYMBOL_PATH
環境変数で指定された dotCover アクセスシンボルサーバーを許可します。
関連ページ:

カバレッジスナップショットとは
dotCover は、カバレッジスナップショットにカバレッジ分析データを記録して格納します。カバレッジスナップショットは、カバレッジ実行に関与し、テスト実行中にソースコードまたは PDB ファイルを使用できるすべてのアセンブリのコードカバレッジ統計を含むデータユニットです。カバレッジスナップショットは、*.dcvr 拡張子の付いたファイルに保存され、後で Visual Studio(dotCover がインストールされている場合)または dotCover スタンドアロンアプリケーションで開くことがで...

カバレッジフィルターを設定する
場合によっては、カバレッジ分析の範囲を制限する必要があります。例: 複数のプロジェクトと何千ものテストを含む大スコープなアプリケーションの開発に参加する場合、これは理にかなっています。この場合、ソリューション内のすべてのプロジェクト (型、型メンバー) のカバレッジを分析する必要はなく、作業中のコードに関連するものだけを分析する必要があります。もう 1 つの例は、現在関心のないノード (名前空間、クラス、メソッド) を除外して、カバレッジツリーの「ノイズを減らす」ことです。このような場合は常に、...