dotCover 2018.2 Help

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

dotCoverコンソールランナーは、dotCover配布パッケージに含まれるコマンドラインツールです: このツールを使用する

  • 任意のテストランナー(MSTest、NUnit、xUnit、MSpecなど)の実行を制御し、カバレッジスナップショットで実行されたテストのカバレッジを記録します。
  • カバレッジスナップショットをマージします。
    たとえば、プロジェクトまたはソリューションで複数の異なる形式の単体テストを使用する場合は、スナップショットをマージする必要があります。この場合、対応するすべてのテストランナーのためにコンソールランナーを起動し、いくつかのカバレッジスナップショットを取得する必要があります。次に、マージコマンドを使用してスナップショットをマージすることができます。
  • さまざまな形式でカバレッジレポートを生成します。
    報告するコマンドを使用して、カバレッジスナップショットから必要な形式のレポートを生成します。

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

コンソールランナーの設定

サーバー上にdotCover Console Runnerを設定するには

  1. 以下のいずれか 1 つを実行します:
  2. コンソールランナーを設定するマシンにアーカイブをコピーします。
  3. アーカイブからコンソールランナー実行ファイル(dotCover.exe)を開始するディレクトリにファイルを展開します。

必要に応じて、Console Runner実行可能ファイルへのパスをシステムパスとして追加して、 dotCover コマンドをどこでも使用できるようにすることもできます。

基本シナリオ

次の手順は、Console Runnerでカバレッジを実行する最も単純なケースを示しています。

単一ユニットテストプロジェクトをカバーする

  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"")を付けてエスケープする必要があります
    • 出力はレポートファイル名です。
    • 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 を使用して、指定されたパラメータでカバレッジを実行します。

dotnet.exeを使用して単体テストのカバレッジ分析を実行する

また、dotCoverコンソールランナーを使用する簡単な方法もあります。したがって、カバレッジ分析は、一般的なMicrosoftドライバ dotnet.exeを使用して実行できます。これを使用する主な利点は、ユニットテストランナーへの絶対パス、テストでの .dll へのパスなどを指定する必要がないことです。プロジェクトの作業ディレクトリを開いて実行するだけです: dotnet dotcover test

dotnetツールを使用してプロジェクト内の単位テストのカバレッジ分析を実行するには(手順1〜4はプロジェクトごとに1回)

  1. 公式のnuget.orgサイトで、JetBrains.dotCover.CommandLineTools(英語)パッケージを見つけてください。
  2. ないはユニットテストプロジェクトでこのパッケージを参照しますか?その代わりに、 .csproj ファイルを開き、パッケージ名とそのバージョンを含む行を ItemGroup 要素に追加します: 例えば:
    <ItemGroup> <DotNetCliToolReference Include="JetBrains.dotCover.CommandLineTools" Version="2018.2.0" /> <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ファイルのすべてのパラメーターは無視されます。

フィルターの適用

カバレッジレポートに興味のない情報が含まれている場合は、カバレッジレポートに含めるか除外すべきかをコンソールランナーに伝えるフィルタを適用できます。

任意の順序でインクルードフィルタと除外フィルタを指定できます。コンソールランナーは、順序に関係なく、まずインクルードフィルターを適用してフィルターを除外します。
includeフィルタが明示的に指定されていない場合、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ノードに追加します。
  • もう一つの選択肢は、その属性に基づいてクラスとメソッドをフィルタリングすることです: 例: 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.xml および dotcover c testProject2.xmlを使用して、各テストプロジェクトで cover (c) コマンドを実行します。その結果、カバレッジスナップショットSnapshot1.dcvrSnapshot2.dcvrの2つが得られます。
  3. Run the マージ(m) command to merge both snapshots:
    dotcover m merge.xml
    where the merge.xml is the configuration file:

    <?xml version="1.0" encoding="utf-8"?> <MergeParams> <Source>Snapshot1.dcvr</Source> <Source>Snapshot2.dcvr</Source> <Output>MergedSnapshots.dcvr</Output> </MergeParams>

  4. To build an HTML test report from the merged snapshots, run the 報告書(r) command
    dotcover r report.xml
    where the report.xml is the configuration file:

    <?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 環境変数とレジストリで指定されたすべてのディレクトリで、

必要に応じて、シンボルファイルを探す他の場所を指定することができます。これを行うには、カバーコマンドを使用するときに次のパラメータを使用します。

  • SymbolSearchPaths パラメータを使用して、セミコロンで区切られたパスのリストを指定してシンボルファイルを検索します。各パスは、ディレクトリパスまたはシンボルサーバパス( srv*C:\LocalSymbols*http://symbolserver:33417/など)のいずれかにすることができます。
  • AllowSymbolServerAccess パラメータを使用して、 SymbolSearchPaths パラメータまたは _NT_SYMBOL_PATH 環境変数で指定されたdotCoverアクセスシンボルサーバを許可します。
最終更新日: 2018年9月7日