コード カバレッジ

ヒント

Microsoft.Testing.Platform.MSBuild (MSTest、NUnit、xUnit ランナーによって推移的に含まれる) を使用する場合、コード カバレッジ拡張機能は NuGet パッケージをインストールするときに自動的に登録されます。コードの変更は必要ありません。

コード カバレッジ機能は、Microsoftで使用できます。Testing.Platform (MTP) を使用して、単体テストなどのコード化されたテストによってテストされているプロジェクトのコードの割合を決定します。 バグから効果的に保護するには、コードの大部分をカバーするようにテストを実行する必要があります。

Microsoft コード カバレッジ

Microsoft コード カバレッジ分析は、マネージド (CLR) コード とアンマネージド (ネイティブ) コードの両方で実行できます。 静的と動的の両方のインストルメンテーションがサポートされています。 この拡張機能には、 Microsoft.Testing.Extensions.CodeCoverage NuGet パッケージが必要です。

注

拡張機能では、アンマネージ (ネイティブ) コード カバレッジが既定で無効になっています。 必要に応じて、EnableStaticNativeInstrumentation および EnableDynamicNativeInstrumentation フラグを使用して有効にしてください。 アンマネージド コード カバレッジの詳細については、「静的および動的ネイティブ インストルメンテーション」を参照してください。

Important

パッケージは、ライセンス モデルを使用するために Microsoft .NET ライブラリのクローズド ソースで無料で出荷されます。

Microsoft コード カバレッジの詳細については、GitHub ページを参照してください。

オプション

Option [説明]
--coverage dotnet-coverage ツールを使用してコード カバレッジを収集します。
--coverage-output 生成されたカバレッジ ファイルの名前またはパス。 相対パスは テスト結果ディレクトリ を基準に解決されます。 既定値は、そのディレクトリ内の <guid>.coverage です。 カバレッジ出力ファイルを参照してください。
--coverage-output-format 出力ファイル形式。 サポートされている値: coverage、xml、cobertura。 既定値は coverage です。
--coverage-settings XML コード カバレッジの設定。

使用可能なオプションの詳細については、settings および サンプルを参照してください。

注

Microsoft.Testing.Extensions.CodeCoverage の IncludeTestAssembly の既定値は falseされていますが、VSTest では true 。 つまり、テスト プロジェクトは既定で除外されます。 詳細については、「Code Coverage の構成」を参照>。

カバレッジ出力ファイル

実行 dotnet test 複数モジュールですべてのアプリケーションのカバレッジ レポートを保持するには、 --coverage-outputを省略します。 この拡張機能は、各レポートの GUID ベースの名前を生成し、 --coverage-output-formatからファイル拡張子を選択します。

dotnet test -- --coverage --coverage-output-format cobertura

--coverage-outputを指定した場合、dotnet testはすべてのテスト アプリケーションに同じ値を転送します。 相対パスは、そのアプリケーションの結果ディレクトリから解決されます。絶対パスが指定どおりに使用されます。 このオプションでは、マージされたソリューション レベルのレポートは要求されません。

Warning

既定の flat レイアウトでは、同じ出力パスを使用するアプリケーションは、アプリケーションが順番に実行される場合でも、互いのカバレッジ レポートを上書きします。 テスト コマンドは、カバレッジの喪失に関する警告なしで成功する可能性があります。

競合のない固定相対ファイル名を保持するには、--results-directory-layout per-module の前に SDK の -- オプションを使用します。

dotnet test --results-directory-layout per-module -- --coverage --coverage-output-format cobertura --coverage-output my-output-file.xml

各アプリケーションは、 my-output-file.xml 独自のプロジェクト/フレームワーク/ランタイム ディレクトリの下に書き込みます。 絶対 --coverage-output パスは、これらのディレクトリをバイパスします。 レポートを分離するには、アプリケーションごとに相対ファイル名または異なる絶対パスを使用します。

互換性のあるカバレッジ拡張機能では、 成果物の後処理を通じて保持されたレポートをマージできます。 この機能は --coverage-output とは別であり、マージ前に上書きされたデータを復元することはできません。

{asm}、{tfm}、{arch}などのレポート ファイル名プレースホルダーは、--coverage-outputではなくテスト レポートに適用されます。

カバレッジの概要としきい値

Important

MTP 2.4 以降では、ファーストクラスのカバレッジ結果モデルを使用できます。

互換性のあるコレクターは、カバー済みおよびカバー可能な測定値、しきい値評価、ならびにカバレッジ レポートへの参照を、1 つの関連付けられたテスト カバレッジ結果として公開できます。 ターミナル レポーターと互換性のあるレポート コンシューマーは、コレクター固有のファイルを解析せずに測定値をレンダリングし、パーセンテージを導き出します。

コレクターは、このモデルを発行するかどうかを選択します。 コレクターの文書化されたオプションを使用して、コレクションとしきい値を構成します。

コレクターを作成する場合は、メッセージ バスを介して TestCoverageMessage、 TestCoverageThresholdMessage、および TestCoverageReportMessage を発行します。 コントラクトと実行可能な例については、カバレッジ結果を公開を参照してください。 レポート拡張機能内の相関データについては、ITestCoverageCapabilities と ITestCoverageResult サービスを使用します。

発行されたしきい値の評価が失敗すると、コード 14で正常に実行が終了します。 しきい値エラーがプロセスを失敗させるべきではない場合は、 --ignore-exit-code 14 を使用します。

バージョン互換性

次の表に、Microsoft.Testing.Extensions.CodeCoverage と MTP の異なるバージョン間の互換性を示します。

Microsoft.Testing.Extensions.CodeCoverage MTP
18.1.x 2.0.x
18.0.x 1.8.x
17.14.x 1.6.2

注

互換性と最新の機能を最大限に活用するには、両方のパッケージの最新バージョンを一緒に使用することをお勧めします。

Coverlet

Coverlet Microsoft Testing Platform Integration (coverlet.MTP) は、coverlet.collector 機能を実装する MTP のネイティブ拡張機能です。

coverlet.MTP NuGet パッケージをテスト projectに追加します。

dotnet add package coverlet.MTP

コード カバレッジを収集するには、 --coverlet フラグを使用してテストを実行します。

dotnet test --coverlet

または、 --coverlet フラグを使用してテスト実行可能ファイルを実行します。

dotnet exec <test-assembly.dll> --coverlet

テストの実行後、結果を含む coverage.json ファイルが現在のディレクトリに生成されます。

オプション

Option [説明]
--coverlet コードのカバレッジ データ コレクションを有効にします。
--coverlet-output-format <format> カバレッジ レポートの出力形式。 サポートされている形式: json、 lcov、 opencover、 cobertura、および teamcity。 複数の形式を含めるには、複数回指定します。
--coverlet-include <filter> [Assembly]Typeなど、フィルターに一致するアセンブリを含めます。 フィルターを追加するには、複数回指定します。
--coverlet-include-directory <path> ソース ファイル用の追加のディレクトリを含めます。 ディレクトリを追加するには、複数回指定します。
--coverlet-exclude <filter> [Assembly]Typeなど、フィルターに一致するアセンブリを除外します。 フィルターを追加するには、複数回指定します。
--coverlet-exclude-by-file <pattern> glob パターンに一致するソース ファイルを除外します。 パターンを追加するには、複数回指定します。
--coverlet-exclude-by-attribute <attribute> 特定の属性で修飾されたメソッドまたはクラスを除外します。 属性を追加するには、複数回指定します。
--coverlet-include-test-assembly カバレッジ レポートにはテスト アセンブリも含めます。
--coverlet-single-hit コード内の場所ごとにヒット数を 1 に制限します。
--coverlet-skip-auto-props カバレッジで自動実装プロパティをスキップします。
--coverlet-does-not-return-attribute <attribute> メソッドを返さないとマークする属性。 属性を追加するには、複数回指定します。
--coverlet-exclude-assemblies-without-sources <value> ソース コードを使用せずにアセンブリを除外します。 値: MissingAll、 MissingAny、および None。

詳細については、coverlet.MTP のドキュメントを参照してください。