コード カバレッジを使用した、テストされるプロジェクトのコード割合の確認
プロジェクトのコードの割合を単体テストなどのコード化されたテストで実際にテストされているかを判断するには、Visual Studio のコード カバレッジ機能を使用できます。バグに対して効果的に保護するには、テストを実行するか、または、コードの大きな割合を "カバーしてください"。
コード カバレッジ分析は、マネージ (CLI) とアンマネージ (ネイティブ) コードの両方に適用できます。
コード カバレッジはテストのエクスプローラーを使用してテスト メソッドを実行するとオプションです。結果表は、アセンブリ、クラス、メソッドで実行されたコードの割合を示します。また、ソース エディターはすべてのコードがテストされたかを示します。
要件
- Visual Studio Ultimate, Visual Studio Premium
テストのエクスプローラーの単体テストのコード カバレッジを分析するには
[テスト] で、メニューの [コード カバレッジの分析] を選択します。
どの行が実行されたかについては、[コード カバレッジの色分けを表示] を選択 します。
色を変更するか、太字を使用するには、[ツール]、[オプション]、[環境]、[フォントおよび色]、Show settings for: [テキスト エディター]を選択します。[表示項目] の下で、柔軟性の項目を調整します。
結果が低カバレッジを参照する場合は、コードのどの部分を実行していない検索し、それらのカバーするためのテストを記述します。開発チームは約 80% のコード カバレッジ用に通常向けます。状況によっては、より低カバレッジは使用できません。たとえば、下位のカバレッジはコードが標準テンプレートから生成する場合に使用できます。
ヒント |
---|
正確な結果を取得する:
意図した結果を、それ トラブルシューティング コード カバレッジを参照してください。 |
ブロックまたは行の報告
コード カバレッジは ブロックにカウントされます。ブロックは、1 桁の開始点と終了のコードです。プログラムの制御フローがテストの実行中にブロックを通れば、そのブロックはマスクとしてカウントされます。ブロックを使用する回数が、結果には影響しません。
また、テーブル ヘッダーの [列の追加と削除] を選択して、行の点で表示結果になることがあります。テストの実行のすべてのコード行のすべてのコード ブロックを実行する場合は、ように、1 種類の行カウントされます。行にした場合とない一部を含むあるコード ブロックがなく、部分行としてカウント。
一部のユーザーは割合が、ソース・コードに表示されるフラグメントのサイズにほぼ一致するため、行の数を取得します。計算の長いブロックが一つのブロックとして多くの行を占めてがカウントされます。
コード カバレッジ結果の管理
コード カバレッジの結果]ウィンドウは、通常、最新の実行の結果を示しています。結果は、テスト データを変更する、またはテストの一部のみを実行するたびに異なります。
また、コード カバレッジのウィンドウが前の他のコンピューターから取得した結果、または結果を表示するために使用できます。
異なるデータを使用してテスト実行から複数の実行結果をマージできます。たとえば、
前の結果セットを表示するにはは、ドロップダウン メニューから選択します。メニューが新しいソリューションを開くときにクリア一時的な一覧を示します。
前のセッションの結果を表示するにはは、[Import Code Coverage Results] を選択して、ソリューションの TestResults フォルダーに移動し、.coverage ファイルをインポートします。
範囲の色、.coverage ファイルを生成してから、ソース・コードが変更されると、不適切である場合があります。
結果をテキストとしてわかりやすくします。は、[Export Code Coverage Results] を選択します。これは、他のツールによって操作またはメールで簡単に送信できる読み取り可能な .coveragexml ファイルを生成します。
結果を他のユーザーに送信するにはは、.coverage ファイルまたはエクスポート .coveragexml ファイルを送信します。チームは、ファイルをインポートできます。ソース・コードの同じバージョンがあり、カバレッジの色を表示できます。
異なる実行の結果のマージ
状況によっては、コードのブロックは異なるテスト データによって使用されます。したがって、さまざまなテスト実行の結果をまとめする場合があります。
たとえば、特定の関数の 50% が隠されることが入力 "2 "を使用してテストを実行すると、あるとします。もう一度テストを実行すると入力が "-関数の他の 50% が隠されることを 2 "カバレッジの色分けビューで表示されます。これで、関数の 100% がマスクは、2 とおりのテスト実行の結果、レポートやカバレッジの色分けビューの表示をマージします。
これを行うに [Merge Code Coverage Results] を使用 します。最新の実行またはインポート結果の組み合わせを選択できます。まとめ結果をエクスポートする場合は、を最初にインポートする必要があります。
マージ操作の結果を保存するには [Export Code Coverage Results] を使用します。
マージの制限
コードのさまざまなバージョンのカバレッジ データをマージした場合、結果は別に表示されますが、まとめられません。取得するのは、結果を使用してテスト データだけを変更するコードの同じビルドをまとめました。
エクスポート、インポート、結果はマージする場合だけ結果を表示できません。ファイル行には、ブロック。行のデータを示す [列の追加と削除] のコマンドを使用します。
マージする ASP.NET テストの結果には、で、別のテストの結果は表示されますが、まとめられません。これは、ASP.NET のアーティファクト独自にのみ適用されます: 他のアセンブリに対して、結果はまとめられます。
コード カバレッジ結果から要素を除く
たとえば、コードがテキスト テンプレートから生成して適用範囲の点からコード内の特定の要素を削除する必要があります。次のコード要素に属性を追加します: System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage クラス、構造体、メソッド、プロパティ、またはプロパティの setter getter のイベント。クラスを除いて、その派生クラスに例を確認します。
次に例を示します。
using System.Diagnostics.CodeAnalysis;
...
public class ExampleClass1
{
[ExcludeFromCodeCoverage]
void ExampleMethod() {...}
[ExcludeFromCodeCoverage] // exclude property
int ExampleProperty1
{ get {...} set{...}}
int ExampleProperty2
{
get
{
...
}
[ExcludeFromCodeCoverage] // exclude setter
set
{
...
}
}
}
[ExcludeFromCodeCoverage]
class ExampleClass2 { ... }
Imports System.Diagnostics.CodeAnalysis
Class ExampleClass1
<ExcludeFromCodeCoverage()>
Public Sub ExampleSub1()
...
End Sub
' Exclude property
< ExcludeFromCodeCoverage()>
Property ExampleProperty1 As Integer
...
End Property
' Exclude setter
Property ExampleProperty2 As Integer
Get
...
End Get
<ExcludeFromCodeCoverage()>
Set(ByVal value As Integer)
...
End Set
End Property
End Class
<ExcludeFromCodeCoverage()>
Class ExampleClass2
...
End Class
// A .cpp file compiled as managed (CLI) code.
using namespace System::Diagnostics::CodeAnalysis;
...
public ref class ExampleClass1
{
public:
[ExcludeFromCodeCoverage]
void ExampleFunction1() { ... }
[ExcludeFromCodeCoverage]
property int ExampleProperty2 {...}
property int ExampleProperty2 {
int get() { ... }
[ExcludeFromCodeCoverage]
void set(int value) { ... }
}
}
[ExcludeFromCodeCoverage]
public ref class ExampleClass2
{ ... }
ネイティブ C++ コードの要素を除く
C++ コードのアンマネージ (ネイティブ) 要素を除外する場合:
#include <CodeCoverage\CodeCoverage.h>
...
// Exclusions must be compiled as unmanaged (native):
#pragma managed(push, off)
// Exclude a particular function:
ExcludeFromCodeCoverage(Exclusion1, L"MyNamespace::MyClass::MyFunction");
// Exclude all the functions in a particular class:
ExcludeFromCodeCoverage(Exclusion2, L"MyNamespace::MyClass2::*");
// Exclude all the functions generated from a particular template:
ExcludeFromCodeCoverage(Exclusion3, L"*::MyFunction<*>");
// Exclude all the code from a particular .cpp file:
ExcludeSourceFromCodeCoverage(Exclusion4, L"*\\unittest1.cpp");
// After setting exclusions, restore the previous managed/unmanaged state:
#pragma managed(pop)
次のマクロの使用:
-
ExcludeFromCodeCoverage(ExclusionName, L"FunctionName");
ExcludeSourceFromCodeCoverage(ExclusionName, L"SourceFilePath");
ExclusionName は一意の名前になります。
FunctionName 機能は、完全修飾名です。これは、ワイルドカードが含まれる場合があります。たとえば、クラスのすべての関数を除外するには、書き込み MyNamespace::MyClass::*
SourceFilePath は、.cpp ファイルのローカルまたは UNC パスです。これは、ワイルドカードが含まれる場合があります。次の例では、特定のディレクトリのすべてのファイルを除外します: \\MyComputer\Source\UnitTests\*.cpp
#include <CodeCoverage\CodeCoverage.h>
名前空間またはクラス内のグローバル名前空間に除外のマクロには、を設定します。
単体テスト コード ファイルまたはアプリケーション コード ファイルに除外を設定できます。
除外は、アンマネージ (ネイティブ) コードとしてコンパイラ オプションを設定するか、#pragma managed(off)を使用してコンパイルする必要があります。
[!メモ]
C++/CLI の関数を除外するには、関数に属性を [System::Diagnostics::CodeAnalysis::ExcludeFromCodeCoverage] コードは、適用します。これは、C の場合と同じです。
追加の要素が含まれているか、除外します。
コード カバレッジ分析は、読み込まれるアセンブリだけで .pdb ファイルに .dll または .exe ファイルと同じディレクトリではに対して実行されます。したがって、状況によっては、適切な .pdb ファイルのコピーを取得することによって含まれるアセンブリのセットを拡張できます。
アセンブリおよび要素は、コード カバレッジ分析に .runsettings ファイルを作成することによって選択された、より多くのコントロールに実行できます。たとえば、クラスに属性を追加せずに特定の種類のアセンブリを除外できます。詳細については、「コード カバレッジ分析のカスタマイズ」を参照してください。
ビルド サービスのコード カバレッジ分析
コードをチェックインすると、テストは他のチーム メンバーから他のすべてのテストをビルド サーバーで実行されます。(既に、これを設定していない場合は、ビルド プロセスでのテストの実行)。これは、プロジェクト全体の適用範囲の最新と包括的なピクチャを持つため、ビルド サービスのコード カバレッジを分析すると便利です。これは、通常、開発用コンピューターで実行されたシステム テストを自動化およびそのほかのコード化されたテストを含んでいます。
チーム エクスプローラーで、[ビルド] を開き、ビルド定義を追加または編集します。
[プロセス] のページで、[自動テスト]、[Test Source]、[実行設定] を展開します。[Code Coverage Enabled] に [Type of Run Settings File] を設定します。
複数のテストのソース・定義がある場合は、それぞれについて、この手順を繰り返します。
ただし、[Type of Run Settings File] という名前のフィールドはありません。
[自動テスト] の[ [Test Assembly] は行の末尾にある省略記号ボタン [...] を選択します。[テストの実行の追加/編集] のダイアログ ボックスで、テスト ランナーで、[Visual Studio テスト ランナー] を選択します。
ビルドの実行後、コード カバレッジ結果は、テストの実行にアタッチされ、ビルドの概要に表示されます。
コマンド ラインのコード カバレッジ分析
コマンド ラインからテストを実行するには、vstest.console.exe を使用します。コード カバレッジはこのユーティリティのオプションです。詳細については、「VSTest.Console.exe コマンド ライン オプション」を参照してください。
Visual Studio 開発者のコマンド プロンプトを起動:
Windows [開始] で、メニューの [すべてのプログラム]、[Microsoft Visual Studio]、[Visual Studio ツール]、[Developer Command Prompt] を選択します。
:実行
vstest.console.exe MyTestAssembly.dll /EnableCodeCoverage
トラブルシューティング
コード カバレッジ結果が表示されない場合は、トラブルシューティング コード カバレッジを参照してください。
外部リソース
ガイダンス
Visual Studio 2012 –の章の 2 番目の一連の配信のためのテスト: 単体テスト: 内部のテスト