次の方法で共有


コード カバレッジのトラブルシューティング

適用対象: Visual Studio

Visual Studio のコード カバレッジ分析ツールは、ネイティブ アセンブリとマネージド アセンブリのデータを収集します (.dll または .exe ファイル)。 ただし、場合によっては、 Code カバレッジの結果 ウィンドウに "空の結果が生成されました: ...." のようなエラーが表示されます。 この記事は、空の結果が発生する可能性があるさまざまな理由のトラブルシューティングと解決に役立ちます。

表示される内容

[テスト] メニューの [コード カバレッジの分析] コマンドを選択し、ビルドとテストが正常に実行された場合、[コード カバレッジ] ウィンドウに結果の一覧が表示されます。 詳細を表示するために、項目を展開する必要がある場合があります。

色分けされたコード カバレッジの結果を示すスクリーンショット。

詳細については、「コード カバレッジを使用した、テストされるプロジェクトのコード割合の確認」を参照してください。

結果が表示されなかったり古い結果が表示されたりすることの考えられる原因

Visual Studio の適切なエディションを使用していない

Visual Studio Enterprise が必要です。

テストが実行されなかった

分析

出力ウィンドウをチェックします。 [出力元の表示] ドロップダウン リストで、[テスト] を選択します。 記録された警告またはエラーがあるかどうかを確認します。

説明

コード カバレッジ分析は、テストの実行中に行われます。 分析には、テストの実行時にメモリに読み込まれるアセンブリだけが含まれます。 テストが実行されない場合、コード カバレッジで報告される結果はありません。

解像度

テスト エクスプローラーで Run All を選択して、テストが正常に実行されたことを確認します。 [コード カバレッジの分析] を使用する前にエラーを修正します。

前の結果が表示されている

テストを変更し、再実行したときに、まだ前のコード カバレッジの結果が表示され、コードの色分けも前の実行のものである場合があります。 問題を解決するには、次の手順に従います。

  1. [コード カバレッジの分析] を実行します。
  2. [コード カバレッジの結果] ウィンドウで、最新の結果セットが選択されていることを確認します。

.pdb (シンボル) ファイルが使用できない

分析

コンパイル ターゲット フォルダー (通常は bin\debug) を開き、アセンブリごとに、.dll または .exe ファイルと同じディレクトリに .pdb ファイルがあることを確認します。

説明

コード カバレッジ エンジンでは、すべてのアセンブリに、テストの実行中にアクセス可能な .pdb ファイルが関連付けられている必要があります。 特定のアセンブリに .pdb ファイルがない場合、アセンブリは分析されません。

.pdb ファイルは、.dll または .exe ファイルと同じビルドから生成されている必要があります。

解像度

ビルド設定で .pdb ファイルが生成されていることを確認します。

  • プロジェクトのビルド時に .pdb ファイルが更新されない場合は、プロジェクトのプロパティを開き、 Build ページを選択し、 Advancedを選択して、 Debug Info を調べます。

  • Visual Studio 2022 以降のバージョンでは、.NET Core または .NET 5 以降を対象とする C# プロジェクトの場合、プロジェクトのプロパティを開き、 Build タブを選択し、 General を選択して、 Debug シンボルを検査します。

  • C++ プロジェクトの場合は、生成された .pdb ファイルに完全なデバッグ情報が含まれていることを確実にします。 プロジェクトのプロパティを開き、[リンカー]>[デバッグ]>[情報の生成][共有と発行用に最適化されたデバッグ情報の生成] (/DEBUG:FULL) に設定されていることを確認します。

.pdb ファイルと .dll または .exe ファイルが別の場所にある場合は、.pdb ファイルを同じディレクトリにコピーします。 別の場所で .pdb ファイルを検索するようにコード カバレッジ エンジンを構成することもできます。 詳細については、「コード カバレッジ分析のカスタマイズ」を参照してください。

インストルメント化または最適化されたバイナリが使用されます

分析

バイナリが、ガイド付き最適化のプロファイルなどの高度な最適化を行ったか、 vsinstr.exevsperfmon.exeなどのプロファイリング ツールによってインストルメント化されているかを判断します。

説明

アセンブリが別のプロファイリング ツールによって、既にインストルメント化または最適化されている場合、アセンブリはコード カバレッジ分析から省略されます。 コード カバレッジ分析は、このようなアセンブリでは実行できません。

解像度

最適化をオフにし、新しいビルドを使用します。

コードが管理されていない (.NET) またはネイティブ (C++) コード

分析

マネージド コードまたは C++ コードでいくつかのテストを実行しているかどうかを判断します。

説明

Visual Studio のコード カバレッジ分析は、マネージド コードとネイティブ (C++) コードでのみ使用できます。 サードパーティ製ツールで作業している場合、コードの一部またはすべてが別のプラットフォームで実行される可能性があります。

解像度

使用できるものはありません。

プロジェクト名に 'DataCollector' が含まれている

プロジェクト名に DataCollector を使用するプロジェクトは、コード カバレッジで識別されません。

アセンブリが NGen によってインストールされた

分析

アセンブリがネイティブ イメージ キャッシュから読み込まれるかどうかを確認します。

説明

パフォーマンス上の理由から、ネイティブ イメージ アセンブリは分析されません。 詳細については、「Ngen.exe (ネイティブ イメージ ジェネレーター)」を参照してください。

解像度

MSIL バージョンのアセンブリを使用します。 アセンブリを NGen で操作しません。

カスタム .runsettings ファイルに構文の問題がある

分析

カスタム .runsettings ファイルを使用している場合は、構文エラーが含まれている可能性があります。 コード カバレッジは実行されず、テストの実行の最後にコード カバレッジ ウィンドウが開かないか、古い結果が表示されます。

説明

カスタム .runsettings ファイルを使用して単体テストを実行して、コード カバレッジ オプションを構成できます。 オプションで、ファイルを含めるか、除外するかを指定できます。 詳細については、「コード カバレッジ分析のカスタマイズ」を参照してください。

解像度

エラーには次の 2 種類があります。

  • XML エラー

    Visual Studio XML エディターで .runsettings ファイルを開きます。 エラーを示す箇所を探します。

  • 正規表現エラー

    ファイル内の各文字列は正規表現です。 エラーのすべてをレビューし、特に次の文字を探します。

    • かっこ (...) またはエスケープされていないかっこ \(...\) が一致しません。 検索文字列内でかっこを一致させる場合は、エスケープする必要があります。 たとえば、関数を一致させるには .*MyFunction\(double\) を使用します。
    • 式の先頭のアスタリスクまたは正符号。 任意の文字列と一致させるには、ピリオドとアスタリスクを続けて使用します (.*)。

カスタム .runsettings ファイルに不適切な除外が含まれている

分析

カスタム .runsettings ファイルを使用している場合は、アセンブリが含まれていることを確認します。

説明

カスタム .runsettings ファイルを使用して単体テストを実行して、コード カバレッジ オプションを構成できます。 オプションで、ファイルを含めるか、除外するかを指定できます。 詳細については、「コード カバレッジ分析のカスタマイズ」を参照してください。

解像度

.runsettings ファイルからすべてのInclude ノードを削除し、すべてのExclude ノードを削除します。 これで問題が解決する場合は、各ノードを段階的に元に戻します。

DataCollectors ノードがコード カバレッジを指定していることを確認します。 「コード カバレッジ分析のカスタマイズ」の例と比較します。

一部のコードが常に未カバーとして表示される

ネイティブ DLL 内の初期化コードがインストルメンテーションの前に実行される

分析

静的にリンクされたネイティブ コードでは、初期化関数 DllMain の一部とそれが呼び出すコードが、コードが実行された場合でも未カバーとして表示されることがあります。

説明

コード カバレッジ ツールは、アプリケーションが実行を開始する直前にアセンブリにインストルメンテーションを挿入することで動作します。 事前に読み込まれるアセンブリでは、アプリケーションの実行前の、アセンブリの読み込み直後に DllMain 内の初期化コードが実行されます。 そのコードは、通常、静的に読み込まれたアセンブリに適用されるため、未カバーであるように見えます。

解像度

なし。

関連情報