ヒント
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 のドキュメントを参照してください。
.NET