dotCover 2025.1 ヘルプ

コマンドラインツールによるカバレッジ分析

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 help

dotCover コマンドラインツールを構成する

dotCover コマンドラインツールは、コマンドラインパラメーターまたは XML 構成ファイルを使用して構成できます。両方のアプローチを同時に使用できます。競合が発生した場合、コマンドラインパラメーターは XML で指定されたパラメーターをオーバーライドします。

例:

dotCover cover-dotnet --output AppCoverageReport.html --reporttype HTML -- test "C:\MyProject\MainTests.csproj"
  • 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.xml

    XML 構成ファイルで定義された相対パスは、このファイルの場所を基準として扱われます。

.NET プロジェクトの単体テストカバレッジを分析する

  1. ソリューションフォルダーを開きます。

  2. ソリューションを構築します。

    dotnet build
  3. Run tests with coverage analysis and get a coverage snapshot:

    dotCover cover-dotnet --output snapshot.dcvr -- test --no-build

    To get a report instead of a snapshot, use the --ReportType parameter:

    dotCover cover-dotnet --output report.xml --ReportType XML -- test

    XML ファイルを使用して dotCover を構成し、それを引き続き使用する場合は、ファイルへのパスを指定します。

    dotCover cover-dotnet "C:\config\config.xml" -- test

.NET フレームワークプロジェクトの単体テストカバレッジを分析する

次の手順は、.NET フレームワークプロジェクトでコマンドラインツールを使用してカバレッジを実行する最も単純なケースを示しています。

  1. ユニットテストプロジェクトがビルドされていることを確認してください。

  2. 実行:

    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 レポートを生成します)

  3. 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」フィルター (存在する場合) を適用します。

  • デフォルトでは、「除外」フィルターを指定したかどうかに関係なく、コマンドラインツールはシステムアセンブリに対して次のフィルターを追加します: mscorlibSystemSystem.*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 パラメーターを使用します。例: プロジェクトのすべてのアセンブリをスナップショットに追加するには、以下を構成ファイルに追加します。

<Scope> <ScopeEntry>ProjectFolder/**/*.dll</ScopeEntry> <ScopeEntry>ProjectFolder/**/*.exe</ScopeEntry> </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:

<?xml version="1.0" encoding="utf-8"?> <AnalyseParams> <TargetExecutable>D:\Program Files\NUnit 2.6\bin\nunit-console.exe</TargetExecutable> <TargetArguments>AppTests.dll AppTests2.dll AppTests3.dll</TargetArguments> <TargetWorkingDir>D:\Projects\TheApplication\bin\Debug</TargetWorkingDir> <Output>AppCoverageReport.html</Output> <ReportType>html</ReportType> </AnalyseParams>

ただし、単体テストプロジェクトが異なる単体テストフレームワークを使用している場合、このアプローチは機能しません。このような場合、カバレッジ、マージ、レポートを個別のステップに分割できます。

MSTest を使用する TestProject1 と NUnit を使用する TestProject2 という 2 つの単体テストプロジェクトがあるとします。両方のプロジェクトでカバレッジを実行し、単一のレポートを取得するには、次の手順を実行します。

dotCover: Merging coverage snapshot into a single report

複数のプロジェクトのカバレッジを個別のステップで実行する

  1. 各テストプロジェクトでカバー (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>
  2. Run the cover (c) (or cover-dotnet for .NET projects) command on each of the test projects using the prepared configuration files: dotCover cover testProject1.xml and dotCover cover testProject2.xml . As a result, you will get two coverage snapshots, Snapshot1.dcvr and Snapshot2.dcvr .

  3. マージ (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>
  4. マージされたスナップショットから 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 アクセスシンボルサーバーを許可します。