コマンドラインからのカバレッジ分析
dotCover コマンドラインツールを使用すると、次のことが可能になります。
任意のテストランナー(MSTest、NUnit、xUnit、MSpec など)を使用してカバレッジ分析を実行し、実行されたテストのカバレッジをカバレッジスナップショットに記録します。
マージコマンドを使用してカバレッジスナップショットをマージします。たとえば、異なるテストフレームワークを使用するユニットテストのスナップショットを結合します。
レポートコマンドを使用して、さまざまな形式でカバレッジレポートを生成します。
このツールは、Windows (x86、x64、arm64)、Linux (x64、arm32、arm64、musl-x64、musl-arm64)、macOS (x64、arm64) で使用できます。
配信形式
このツールは次の形式で配布されます。
フォーマット | クロスプラットフォームのフレームワークに依存するツール (すべての OS、.NET がインストールされている必要があります) | プラットフォーム固有の自己完結型ツール (OS 固有、バンドルされた .NET) | プラットフォーム固有の (Windows のみ、.NET フレームワークが必要) |
---|---|---|---|
アーカイブ | |||
NuGet パッケージ |
dotCover 2023.2 以前では、コマンドラインツールも別のパッケージ(英語)として配布されていましたが、今後はメンテナンスされなくなります。
dotCover コマンドラインツールをインストールする
ツールをインストールするにはいくつかの方法があります。
dotnet
ドライバーを使用して、コンピューターまたは CI/CD サーバー上でローカルにカバレッジ分析を実行する場合に推奨されます。
コンピューター上のすべてのプロジェクトのグローバルツールとして
実行:
dotnet tool install --global JetBrains.dotCover.CommandLineTools --version 2024.2.0
特定のプロジェクト / ディレクトリのローカルツールとして
実行:
dotnet tool install JetBrains.dotCover.CommandLineTools --version 2024.2.0 --tool-path "some/path"
CI/CD サーバーのビルドステップとしてカバレッジ分析を実行する場合に推奨されます。
必要な単体テストプロジェクトを開き、JetBrains.dotCover.CommandLineTools(英語) パッケージへの参照を追加します。例:
Install-Package JetBrains.dotCover.CommandLineTools -Version 2024.2.0CI/CD サーバーで、NuGet パッケージを復元するビルドステップを追加します。
CI/CD サーバーで、
dotnet dotCover.dll ...
などのコマンドラインツールを使用するビルドステップを追加します。
コマンドラインツールをインストールするための汎用的な方法。
必要なオペレーティングシステム用の dotCover コマンドラインツールパッケージをダウンロードします。
アーカイブを抽出します。
dotCover コマンドラインツールを構成する
dotCover コマンドラインツールは、コマンドラインパラメーターまたは XML 構成ファイルを使用して構成できます。両方のアプローチを同時に使用できます。競合が発生した場合、コマンドラインパラメーターは XML で指定されたパラメーターをオーバーライドします。
例:
ツールのインストール型や OS に関係なく、同じパラメーター構文 (例:
--TargetExecutable=MyApp.exe
) を使用できます。コマンドラインパラメーターでは大文字と小文字が区別されます。たとえば、次は等しい:
--TargetExecutable=MyApp.exe
と--targetexecutable=MyApp.exe
スラッシュ
/
および二重ダッシュ--
を使用してパラメーターを指定できます。たとえば、次は等しい:--TargetExecutable=MyApp.exe
と/TargetExecutable=MyApp.exe
等号
=
とコロン:
を使用してパラメーター値を指定できます。たとえば、次は等しい:--TargetExecutable=MyApp.exe
と--TargetExecutable:MyApp.exe
コマンドラインパラメーターの相対パスは、コマンドラインツールの作業ディレクトリを基準にして処理されます。
パラメーターの完全なリストについては、「コマンドリファレンス」を参照してください。
すべての dotCover コマンド ( version
および help
を除く) は、XML 構成ファイルでパラメーターを受け入れることができます。構成ファイルは、すべてのパラメーターをインラインで指定したり、バッチファイルで指定したりする代わりに使用できます。サポートされている XML タグでのエラーを回避するには、最初に構成スタブファイルを生成し、次にカスタムパラメーター値を指定することをお勧めします。
スタブ構成ファイルを生成するには
実行:
dotCover help <command name> <configuration stub file>例:
dotnet
の場合:dotCover.exe help dotnet C:\Temp\MyConfig.xml
設定ファイルに基づいてカバレッジ分析を実行するには
カスタムパラメーター値を含む構成ファイルを dotCover コマンドに提供します。例:
dotnet
の場合:dotCover.exe dotnet C:\Temp\MyConfig.xmlXML 構成ファイルで定義された相対パスは、このファイルの場所を基準として扱われます。
.NET プロジェクトの単体テストカバレッジを分析する
コマンドラインツールをどのようにインストールしたかに応じて、.NET および .NET Core プロジェクトでカバレッジ分析を実行するには 2 つの方法があります。フレームワークに依存する .NET ツール (dotnet
ドライバー経由) を使用する方法と、自己完結型ツール (dotCover.exe
、dotCover.sh
) を使用する方法です。
ソリューションフォルダーを開きます。
ソリューションを構築します。
dotnet buildカバレッジ分析でテストを実行する:
dotnet dotcover cover-dotnet -- test --no-builddotnet dotcover
.NET ツールは、dotCover.exe
およびdotCover.sh
と同じコマンドとパラメーターのセットをサポートします。例: レポート型を指定するには、すべてのツールで--ReportType
パラメーターを使用します。dotnet dotcover cover-dotnet --ReportType=XML -- testXML ファイルを使用して
dotCover.exe
を構成し、それを引き続き使用する場合は、ファイルへのパスを指定します。dotnet dotcover cover-dotnet "C:\config\config.xml" -- test
dotCover.exe/dotCover.sh が配置されているディレクトリに移動します。
コンソールに次のコマンドを入力します。
dotCover.exe dotnet --output=AppCoverageReport.html --reportType=HTML -- test "C:\MyProject\MainTests.csproj"ここに:
--output
はレポートのファイル名です--reportType
はレポートのタイプです (この場合、HTML レポートを生成します)最後の
-- test "C:\MyProject\MainTests.csproj"
はdotnet
に渡される引数です。これは--targetArguments="test \"C:\MyProject\MainTests.csproj\""
のショートカットです
コマンドラインツールの動作が完了すると、dotCover コマンドラインツールと同じディレクトリに
AppCoverageReport.html
ファイルが作成されます。このファイルを開いて、Web ブラウザーでカバレッジ結果を調べます。
.NET フレームワークプロジェクトの単体テストカバレッジを分析する
次の手順は、.NET フレームワークプロジェクトでコマンドラインツールを使用してカバレッジを実行する最も単純なケースを示しています。
ユニットテストプロジェクトがビルドされていることを確認してください。
dotCover.exe があるディレクトリに移動します。
コンソールに次のコマンドを入力します。
dotCover.exe 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 レポートを生成します)
実行が完了すると、ツールは、それが配置されているのと同じディレクトリに
AppCoverageReport.html
ファイルを生成します。このファイルを開いて、Web ブラウザーでカバレッジ結果を調べます。
カバレッジフィルターを適用する
カバレッジレポートに、必要のない情報が含まれているとします。その場合、フィルターを適用して、カバレッジレポートに何を含めるか、何を除外するかをコマンドラインツールに指示することができます。
包含フィルターと除外フィルターは任意の順序で指定できます。
順序に関係なく、コマンドラインツールは最初に「含める」フィルターを適用し、次に「除外する」フィルターを適用します。
「含める」フィルターが明示的に指定されていない場合、ツールは最初にすべてを含め、次に「除外」フィルターで指定されたものを除外します。
「include」フィルターがある場合、コマンドラインツールは最初に「include」フィルターに一致しないものをすべて除外し、次に明示的な「exclude」フィルター (存在する場合) を適用します。
デフォルトでは、「除外」フィルターを指定したかどうかに関係なく、コマンドラインツールはシステムアセンブリに対して次のフィルターを追加します:
mscorlib
、System
、System.*
、Microsoft .*
必要に応じて、これらのデフォルトフィルターを
--disableDefaultFilters
コマンドラインパラメーターで無効にすることができます。
カバレッジフィルターを指定するには、コマンドラインパラメーターを使用する方法と XML 構成ファイルを使用する方法の 2 つがあります。
カバレッジ分析から項目を除外 / 含めるには、
--filters
パラメーターを指定してコマンドラインツールを実行する必要があります。例: (簡潔にするために、フィルター以外のパラメーターは省略します):dotCover.exe ... --filters=-:module=AdditionalTests;-:type=MainTests.Unit*; -:type=MainTests.IntegrationTests;function=TestFeature1;この例は、XML 構成例と同等です。セミコロン (;) はフィルターエントリだけでなく、フィルターエントリ内の項目も区切ることに注意してください。
-:
で始まるエントリは、+:
で始まるエントリを除外します(その逆もあります)。モジュールのみを除外 / インクルードする必要がある場合は、
module
キーワードを省略できます。dotCover.exe ... --filters=-:AdditionalTests;それらの属性に基づいてクラスとメソッドを除外するには、
--attributeFilters
パラメーターを使用する必要があります。例:System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute
属性でマークされたメソッドをフィルターにかける:dotCover.exe ... --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
パラメーターを使用します。例: プロジェクトのすべてのアセンブリをスナップショットに追加するには、以下を構成ファイルに追加します。
フィルターで除外されたものはすべて、指定されたスコープに関係なく除外されます。
複数のテストプロジェクトをカバー
ソリューション内に複数の単体テストプロジェクトがある場合は、「基本シナリオ」で説明したように、それらすべてのカバレッジを一度に実行できます。この場合、各アセンブリへの絶対パスの指定を避けるために、テストアセンブリを指定するときに TargetWorkingDir
パラメーターを使用できます。例: XML 構成ファイルの場合:
ただし、単体テストプロジェクトが異なる単体テストフレームワークを使用している場合、このアプローチは機能しません。このような場合、カバレッジ、マージ、レポートを個別のステップに分割できます。
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>準備された構成ファイル
dotCover c testProject1.xml
とdotCover c testProject2.xml
を使用して、各テストプロジェクトでcover (c)
コマンドを実行します。その結果、2 つのカバレッジスナップショットSnapshot1.dcvr
とSnapshot2.dcvr
が取得されます。マージ (m) コマンドを実行して、両方のスナップショットをマージします。
dotCover m 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 r 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 つの例は、現在関心のないノード (名前空間、クラス、メソッド) を除外して、カバレッジツリーの「ノイズを減らす」ことです。このような場合は常に、...