コマンドラインからのカバレッジ分析
dotCover コンソールランナーは、アーカイブまたは NuGet パッケージ(Windows(英語)、macOS(英語)、Linux(英語))として無料で配布されるコマンドラインツールです。このツールを使用すると、次のことができます。
あらゆるテストランナー(MSTest、NUnit、xUnit、MSpec など)の実行を制御し、実行されたテストのカバレッジをカバレッジスナップショットに記録します。
カバレッジスナップショットをマージします。
たとえば、プロジェクトまたはソリューションでユニットテストのいくつかの異なる形式を使用する場合は、スナップショットをマージする必要がある場合があります。この場合、対応するすべてのテストランナーのコンソールランナーを開始し、いくつかのカバレッジスナップショットを取得する必要があります。次に、merge コマンドを使用してスナップショットをマージできます。さまざまな形式でカバレッジレポートを生成します。
レポートコマンドを使用して、カバレッジスナップショットから目的の形式でレポートを生成します。
次に、このトピックでは、Console Runner を使用して単体テストプロジェクトのカバレッジ分析を実行する方法を理解するのに役立ついくつかのウォークスルーがあります。
コンソールランナーを設定する
サーバーで dotCover Console Runner をセットアップする
JetBrains の Web サイトの dotCover コマンドラインツールパッケージをダウンロード。
コンソールランナーを設定するマシンにアーカイブをコピーします。
アーカイブからディレクトリにファイルを抽出し、そこから Console Runner 実行可能ファイル dotCover.exe を起動します。
オプションで、コンソールランナーを NuGet パッケージ(英語)として取得できます。
.NET フレームワークの基本シナリオ
次の手順は、.NET フレームワークプロジェクトでコンソールランナーでカバレッジを実行する最も単純なケースを示しています。
単体テストプロジェクトをカバーする (.NET フレームワーク)
ユニットテストプロジェクトをビルドします。
dotcover.exe があるディレクトリに移動します。
コンソールに次のコマンドを入力します。
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 レポートを生成します)
コンソールランナーが終了すると、
AppCoverageReport.html
ファイルは dotCover コンソールランナーと同じディレクトリに表示されます。このファイルを開いて、Web ブラウザーのカバレッジ結果を調べます。また、XML ファイルでパラメーターを渡すこともできます。これを行うには、コマンドラインで
dotcover help cover coverage.xml
と入力します。生成された coverage.xml ファイルを開き、設定パラメーターを指定します。例: 設定ファイルは次のようになります。
<?xml version="1.0" encoding="utf-8"?> <AnalyseParams> <TargetExecutable>D:\Program Files\NUnit 2.6\bin\nunit-console.exe</TargetExecutable> <TargetArguments>D:\Projects\TheApplication\bin\Debug\AppTests.dll</TargetArguments> <Output>AppCoverageReport.html</Output> <ReportType>html</ReportType> </AnalyseParams>dotcover cover coverage.xml
を使用して、指定されたパラメーターでカバレッジを実行します。
.NET Core の基本シナリオ
.NET Core プロジェクトの場合、コンソールランナーは別個の cover-dotnet
コマンド(またはより短いバージョンの dotnet
)を提供します。 dotnet.exe をカバレッジ分析で実行します( --TargetExecutable
で dotnet
へのパスを指定したかのように)。
単体テストプロジェクトをカバーする (.NET コア)
ユニットテストプロジェクトをビルドします。
dotcover.exe があるディレクトリに移動します。
コンソールに次のコマンドを入力します。
dotCover.exe dotnet --output=AppCoverageReport.html --reportType=HTML -- test "C:\MyProject\MainTests.csproj"
where:
--output
はレポートファイル名です。--reportType
はレポートのタイプです (この場合、HTML レポートを生成します)最後の
-- test "C:\MyProject\MainTests.csproj"
はdotnet
に渡される引数です。実際には、--TargetArguments="test \"C:\MyProject\MainTests.csproj\""
に置き換えることができますが、はるかに長くなります。おそらく、コマンドライン引数に Unix スタイルの構文を使用していることに気づいたでしょう。Windows でもこの構文を使用できます。例: 以下は Windows で交換可能です(ただし macOS および Linux では不可):
/TempDir:"../myDir"
および--tempDir="../myDir"
コンソールランナーが終了すると、
AppCoverageReport.html
ファイルは dotCover コンソールランナーと同じディレクトリに表示されます。このファイルを開いて、Web ブラウザーのカバレッジ結果を調べます。
dotnet.exe を使用して .NET Core ユニットテストのカバレッジ分析を実行する
.NET Core プロジェクトでカバレッジ分析を実行する基本シナリオに代わるものがあります。一般的な Microsoft ドライバー dotnet.exe で直接実行できます。ここでの主な利点は、dotCover コンソールランナーをダウンロードする必要がないことです(これは、たとえば Docker コンテナーのプラスです)。
しなければならないのは、プロジェクトの作業ディレクトリを開いて実行することです: dotnet dotcover test
dotnet.exe を使用して単体テストプロジェクト(.NET Core)をカバーする (ステップ 1 〜 4 はプロジェクトごとに 1 回行われます)
公式の nuget.org サイトで、JetBrains.dotCover.DotNetCliTool(英語) パッケージを見つけてください。
単体テストプロジェクトでこのパッケージを参照しないでください。代わりに、
.csproj
ファイルを開き、パッケージ名とバージョンを含む行をItemGroup
要素に追加します。例:<ItemGroup> <DotNetCliToolReference Include="JetBrains.dotCover.DotNetCliTool" Version="2019.2.0.1" /> </ItemGroup>コマンドラインで、単体テストプロジェクトを含むディレクトリに移動します。
実行
dotnet restoreこれにより、コンピューターに dotCover コマンドラインツールがダウンロードされます。カバレッジ分析でテストを実行する:
dotnet dotcover test
注意事項
コンソールランナーを使用する際の推奨方法は、置き換えではなく、dotCover.exe の追加です。
dotCover.exe で以前に使用した引数を指定したい場合は、引数名に接頭辞
dc
を追加することによってこれを行うことができます。例: レポート型を指定するには、--ReportType
の代わりに--dcReportType
を使用します。dotnet dotcover test --dcReportType=XMLXML ファイルを使用して dotCover.exe を設定し、それを使用し続ける場合は、ファイルへのパスを指定します。
dotnet dotcover test --dcXML="C:\config\config.xml"このランナー型に適用されない XML ファイルのすべてのパラメーターは無視されます。
フィルターの適用
カバレッジレポートに興味のない情報が含まれている場合は、カバレッジレポートに含めるか除外すべきかをコンソールランナーに伝えるフィルターを適用できます。
包含フィルターと除外フィルターは任意の順序で指定できます。
順序に関係なく、Console Runner は最初に包含フィルターを適用し、次に除外フィルターを適用します。
包含フィルターが明示的に指定されていない場合、Console Runner は最初にすべてを包含し、次に除外フィルターで指定されたものを除外します。
いくつかの包含フィルターがある場合、Console Runner はまず包含フィルターに一致しないものすべてを除外し、次に明示的な除外フィルターがある場合はそれを適用します。
デフォルトでは、除外フィルターを指定するかどうかにかかわらず、Console Runner はシステムアセンブリに対して次のフィルターを追加します。
mscorlib
System
System.*
Microsoft.*
必要に応じて、これらのデフォルトフィルターを DisableDefaultFilters
コマンドラインパラメーターで無効にすることができます。
カバレッジフィルターを指定する方法は 2 つあります。
XML 構成ファイルを使用してカバレッジフィルターを設定する
カバレッジレポートから一部のアイテム(モジュール、クラス、メソッド)を除外し、他のすべてを保持するには、対応するエントリを
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>
または、dotCover.exe コマンドライン引数を使用してカバレッジフィルターを設定することもできます。
コマンドライン引数を使用してカバレッジフィルターを設定する
カバレッジ分析から項目を除外 / 含めるには、
/Filters
パラメーターを使用してコンソールランナーを実行する必要があります。たとえば(簡単にするため、カバレッジターゲットに関連するパラメーターは省略しています)。dotCover.exe cover ... /Filters=-:module=AdditionalTests;-:type=MainTests.Unit*; -:type=MainTests.IntegrationTests;function=TestFeature1;この例は、上記の XML 構成例に相当します。セミコロン(;)は、フィルター項目だけでなく、フィルター項目内の項目も分離することに注意してください。
-:
で始まるエントリは、+:
で始まるエントリを除外します(その逆もあります)。モジュールのみを除外 / インクルードする必要がある場合は、
module
キーワードを省略できます。dotCover.exe cover ... /Filters=-:AdditionalTests;それらの属性に基づいてクラスとメソッドを除外するには、
/AttributeFilters
パラメーターを使用する必要があります。ex:System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute
属性でマークされたメソッドをフィルターにかける:dotCover.exe cover ... /AttributeFilters=System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute;セミコロン(;)はセパレータとして機能します。
カバレッジ結果の範囲を変更する
既定では、カバレッジスナップショットの準備ができると、分析用に読み込まれたアセンブリ、つまりフィルター処理されずにテストされたアセンブリに関する情報のみが含まれます。これにより、全体的なカバレッジの割合が不正確になります。
必要に応じて、情報をスナップショットに追加する必要があるアセンブリの範囲を変更することができます。これを行うには、Scope
パラメーターを使用します。例: プロジェクトのすべてのアセンブリをスナップショットに追加するには、以下を構成ファイルに追加します。
フィルターで除外されたものはすべて、指定されたスコープに関係なく除外されます。
複数のテストプロジェクトをカバー
ソリューションに複数の単体テストプロジェクトがある場合、基本シナリオで説明されているように、それらすべてのカバレッジを一度に実行できます。この場合、各アセンブリへのフルパスを指定しないようにするには、テストアセンブリを指定するときに TargetWorkingDir
パラメーターを使用できます。例:
しかし、このアプローチはうまくいかないことがあります。例: ユニットテストプロジェクトが異なるユニットテストフレームワークを使用する場合このような場合、カバレッジを分割し、マージして個々のステップに報告することができます。
2 つの単体テストプロジェクト、MSTest を使用する TestProject1
と NUnit を使用する TestProject2
があるとします。両方のプロジェクトでカバレッジを実行し、単一のレポートを取得するには、次の手順を実行します。

複数のプロジェクトのカバレッジを個別のステップで実行する
各テストプロジェクトでカバー (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)
コマンドを実行します。結果として、Snapshot1.dcvr
とSnapshot2.dcvr
の 2 つのカバレッジスナップショットが取得されます。マージ (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 コマンドを使用するときに次のパラメーターを使用します。
SymbolSearchPaths
パラメーターを使用して、シンボルファイルを検索するパスのセミコロン区切りリストを提供します。各パスは、ディレクトリパスまたはシンボルサーバーパス(たとえば、srv*C:\LocalSymbols*http://symbolserver:33417/)のいずれかです。AllowSymbolServerAccess
パラメーターを使用して、SymbolSearchPaths
パラメーターまたは_NT_SYMBOL_PATH
環境変数で指定された dotCover アクセスシンボルサーバーを許可します。
このセクションも参照
関連ページ:

InspectCode コマンドラインツール
ReSharper の最も注目すべき機能の 1 つであるコードインスペクションは、IDE を開かなくても使用できます。無料のクロスプラットフォームコマンドラインツールの InspectCode では、ReSharper のすべてのインスペクションを適用するために、少なくとも 1 つのパラメーター(ソリューションファイル)が必要です。InspectCode を実行する ReSharper コマンドラインツールをダウンロードします。ダウンロードボタンの横にあるセレクタを使用して、オペレーティングシステ...

dupFinder コマンドラインツール
dupFinder は、C# と Visual Basic .NET コードの重複を検出する無料のクロスプラットフォームコマンドラインツールです。しかし、JetBrains ツールである dupFinder は、スマートな方法でそれを行います。デフォルトでは、コードフラグメントが同一である場合だけでなく、異なる変数、フィールド、メソッド、型またはリテラルが含まれている場合でも、構造的に類似している場合、コードフラグメントを重複と見なします。もちろん、許可された類似度と、複製されたフラグメントの最...

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