dotCover 2019.2ヘルプ

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

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

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

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

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

次に、このトピックでは、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>

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

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

coverage multiple steps

別の手順で複数のプロジェクトのカバレッジを実行するには

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

  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アクセスシンボルサーバーを許可します。

最終更新日: 2019年9月30日

関連ページ:

InspectCodeコマンドラインツール

ReSharperの最も注目すべき機能の1つであるコードインスペクションは、Visual Studioを開かなくても利用できます。無料のコマンドラインツールであるInspectCodeでは、ReSharperのインスペクションをすべて適用するために、最低1つのパラメータ(ソリューションファイル)が必...

dupFinderコマンドラインツール

dupFinderは、C#とVisual Basic .NETコードの重複を検出する無料のコマンドラインツールです。しかし、JetBrainsツールであるdupFinderは、スマートな方法でそれを行います。デフォルトでは、コードフラグメントが同一である場合だけでなく、異なる変数、フィールド、メソッ...

カバレッジスナップショットとは

dotCoverは、カバレッジスナップショットにカバレッジ分析データを記録して格納します。カバレッジスナップショットは、カバレッジ実行に関与し、テスト実行中にソースコードまたはPDBファイルが利用可能であったすべてのアセンブリのコードカバレッジ統計を含むデータユニットです。カバレッジスナップショット...

アプリケーションカバレッジの記録

スタートアッププロジェクトまたは外部アプリケーションのカバレッジ実行を開始するとすぐに、dotCoverは実行中にカバレッジを記録するのに役立つカバレッジコントローラーダイアログを表示します。アプリケーションの適用範囲を記録するdotCoverの制御下でターゲットアプリケーション(スタートアッププロ...