dotCover 2018.3ヘルプ

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

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

  • テストランナー(MSTest、NUnit、xUnit、MSpecなど)の実行を制御し、実行されたテストの適用範囲を適用範囲のスナップショットに記録します。

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

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

次に、このトピックでは、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ノードに追加します。

  • もう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年2月14日