dotCover 2020.2 ヘルプ

コマンドラインからのカバレッジ分析

dotCover コンソールランナーは、アーカイブまたは NuGet パッケージ(Windows(英語)macOS(英語)Linux(英語))として無料で配布されるコマンドラインツールです。このツールを使用すると、次のことができます。

  • あらゆるテストランナー(MSTest、NUnit、xUnit、MSpec など)の実行を制御し、実行されたテストのカバレッジをカバレッジスナップショットに記録します。

  • カバレッジスナップショットをマージします。
    たとえば、プロジェクトまたはソリューションでユニットテストのいくつかの異なる形式を使用する場合は、スナップショットをマージする必要がある場合があります。この場合、対応するすべてのテストランナーのコンソールランナーを開始し、いくつかのカバレッジスナップショットを取得する必要があります。次に、merge コマンドを使用してスナップショットをマージできます。

  • さまざまな形式でカバレッジレポートを生成します。
    レポートコマンドを使用して、カバレッジスナップショットから目的の形式でレポートを生成します。

次に、このトピックでは、Console Runner を使用して単体テストプロジェクトのカバレッジ分析を実行する方法を理解するのに役立ついくつかのウォークスルーがあります。

コンソールランナーを設定する

サーバーで dotCover Console Runner をセットアップする

  1. JetBrains の Web サイトの dotCover コマンドラインツールパッケージをダウンロード

  2. コンソールランナーを設定するマシンにアーカイブをコピーします。

  3. アーカイブからディレクトリにファイルを抽出し、そこから Console Runner 実行可能ファイル dotCover.exe を起動します。

オプションで、コンソールランナーを NuGet パッケージ(英語)として取得できます。

.NET フレームワークの基本シナリオ

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

単体テストプロジェクトをカバーする (.NET フレームワーク)

  1. ユニットテストプロジェクトをビルドします。

  2. dotcover.exe があるディレクトリに移動します。

  3. コンソールに次のコマンドを入力します。

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

  4. コンソールランナーが終了すると、AppCoverageReport.html ファイルは dotCover コンソールランナーと同じディレクトリに表示されます。このファイルを開いて、Web ブラウザのカバレッジ結果を調べます。

  5. また、XML ファイルでパラメーターを渡すこともできます。これを行うには、コマンドラインで dotcover help cover coverage.xml と入力します。

  6. 生成された 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>
  7. dotcover cover coverage.xml を使用して、指定されたパラメーターでカバレッジを実行します。

.NET Core の基本シナリオ

.NET Core プロジェクトの場合、コンソールランナーは個別の cover-dotnet コマンド(またはより短いバージョンの dotnet)を提供します。カバレッジ分析で dotnet.exe を実行します( --TargetExecutabledotnet へのパスを指定した場合と同様)。

単体テストプロジェクトをカバーする (.NET コア)

  1. ユニットテストプロジェクトをビルドします。

  2. dotcover.exe があるディレクトリに移動します。

  3. コンソールに次のコマンドを入力します。

    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"

  4. コンソールランナーが終了すると、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 回行われます)

  1. 公式の nuget.org サイトで、JetBrains.dotCover.DotNetCliTool(英語) パッケージを見つけてください。

  2. 単体テストプロジェクトでこのパッケージを参照しないでください。代わりに、.csproj ファイルを開き、パッケージ名とバージョンを含む行を ItemGroup 要素に追加します。例:

    <ItemGroup> <DotNetCliToolReference Include="JetBrains.dotCover.DotNetCliTool" Version="2019.2.0.1" /> </ItemGroup>

  3. コマンドラインで、単体テストプロジェクトを含むディレクトリに移動します。

  4. 実行

    dotnet restore
    これにより、コンピューターに dotCover コマンドラインツールがダウンロードされます。

  5. カバレッジ分析でテストを実行する:

    dotnet dotcover test

注意事項

  1. コンソールランナーを使用する際の推奨方法は、置き換えではなく、dotCover.exe の追加です。

  2. dotCover.exe で以前に使用した引数を指定したい場合は、引数名に接頭辞 dc を追加することによってこれを行うことができます。例:レポートタイプを指定するには、--ReportType の代わりに --dcReportType を使用します。

    dotnet dotcover test --dcReportType=XML

  3. XML ファイルを使用して 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 パラメーターを使用します。例:プロジェクトのすべてのアセンブリをスナップショットに追加するには、以下を構成ファイルに追加します。

<Scope> <ScopeEntry>ProjectFolder/**/*.dll</ScopeEntry> <ScopeEntry>ProjectFolder/**/*.exe</ScopeEntry> </Scope>

フィルターで除外されたものはすべて、指定されたスコープに関係なく除外されます。

複数のテストプロジェクトをカバー

ソリューションに複数の単体テストプロジェクトがある場合、基本シナリオで説明されているように、それらすべてのカバレッジを一度に実行できます。この場合、各アセンブリへのフルパスを指定しないようにするには、テストアセンブリを指定するときに TargetWorkingDir パラメーターを使用できます。例:

<?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>

しかし、このアプローチはうまくいかないことがあります。例:ユニットテストプロジェクトが異なるユニットテストフレームワークを使用する場合このような場合、カバレッジを分割し、マージして個々のステップに報告することができます。

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

dotCover: Merging coverages snapshot into a single report

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

  1. 各テストプロジェクトでカバー (c) コマンドを実行するための 2 つの構成ファイルを作成します。MSZTest を使用する TestProject1testProject1.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 を使用する TestProject2testProject2.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. 準備された構成ファイル dotcover c testProject1.xml および dotcover c testProject2.xml を使用して、各テストプロジェクトで cover (c) コマンドを実行します。結果として、Snapshot1.dcvrSnapshot2.dcvr の 2 つのカバレッジスナップショットが取得されます。

  3. マージ (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>

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

このセクションも参照

最終更新日 :