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

Visual Studio のコード カバレッジ分析ツールは、ネイティブ アセンブリとマネージ アセンブリのデータを収集します (.dll または .exe ファイル)。 しかし、[コード カバレッジの結果] ウィンドウに "空の結果が生成されました: ...." のようなエラーが表示される場合があります。このエラーが発生する原因はいくつかあります。 このトピックは、これらの問題を解決することを目的にしています。

表示される内容

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

色分けされたコード カバレッジの結果

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

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

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

Visual Studio Enterprise が必要です。

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

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

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

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

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

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

  1. コード カバレッジの分析を実行します。

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

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

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

説明
コード カバレッジ エンジンを使用するには、すべてのアセンブリにテストの実行中にアクセスできる .pdb ファイルがあることが必要です。 特定のアセンブリの .pdb ファイルがない場合、そのアセンブリは解析されません。

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

解像度
ビルドが .pdb ファイルを生成するように設定されていることを確認します。 プロジェクトのビルド時に .pdb ファイルが更新されない場合は、プロジェクトのプロパティを開き、[ビルド] ページ、[詳細設定] の順に選択し、[デバッグ情報] を確認します。

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

インストルメント化、または最適化されたバイナリを使用している

分析
バイナリにガイド付き最適化のプロファイルなどの詳細な最適化が適用されたかどうか、またはバイナリが vsinstr.exe や vsperfmon.exe などのプロファイリング ツールによってインストルメント化されたかどうかを確認します。

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

コード カバレッジ分析は、このようなアセンブリでは実行できません。

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

コードがマネージ (.NET) コードまたはネイティブ (C++) コードではない

分析
マネージ コードまたは C++ コードでテストを実行していることを確認します。

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

解像度
解決策はありません。

アセンブリが 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 内の初期化コードが実行されます。 そのコードは未カバーであるように見えます。

通常、これは静的に読み込まれたアセンブリに適用されます。

解像度
なし。

関連項目

コード カバレッジを使用した、テストされるプロジェクトのコード割合の確認