TeamCity On-Premises 2026.2 Help

dotCover

dotCover ランナーは、 JetBrains dotCover を使用して .NET プロセスのカバレッジレポートを生成します。 生成されたレポートは、ビルド結果ページの コードカバレッジタブ に公開されます。

このランナーは、複数の先行する .NET ステップの後に配置して、個々のコードカバレッジをマージし、統合レポートを公開することもできます。

dotCover ステップ設定

このセクションでは、ランナー設定の使用方法について説明します。 現在のタスクに応じてこれらの設定を組み合わせる方法の例については、以下のセクションを参照してください。

DotCover ランナー設定
  • dotCover ツール - dotCover のプリインストール版または カスタム版を選択します。

  • 実行可能ファイルコマンドライン引数 — dotCover カバレッジプロファイルで必要な引数を指定してカスタムプロセスを実行できるようにするオプション設定です。 実行可能ファイル フィールドでは、プロファイリング対象のプロセスを生成するオブジェクトへのパスを指定できます (たとえば、.NET CLI や dotCover ツール自体の .exe/.dll へのパス)。 このステップを使用して、先行する dotCover.NET 、または NUnit ランナーによって生成されたスナップショットをマージする場合は、これらの設定を空のままにします。

  • カバレッジレポートを生成 — ビルド結果ページの コードカバレッジタブに生成されたコードカバレッジレポートのデータを表示するかどうかを指定します。

    ビルドコードカバレッジ

    ビルド結果ページでレポートを公開する必要がない場合は、この設定をオフのままにしておきます。 例: 生成された .html および .dcvr ファイルを ビルドアーティファクトとして公開し、他の場所で使用する場合。

  • 追加の dotCover スナップショットをレポートに含める — ランナーが最終的なカバレッジレポートを生成するために使用する .dcvr スナップショットへのパス。 複数の .dcvr ファイルを指定し、 実行可能ファイル 設定を空のままにできます。 この場合、dotCover はこれらのスナップショットをマージしたレポートを生成します。

    dotCover は、前の dotCover および .NET ステップからスナップショットを自動的に収集するため、必要なすべてのスナップショットが同じ構成で作成される限り、これらのルールを定義する必要がないことに注意してください。 この設定では、 アーティファクト依存関係 経由でインポートされたスタンドアロン構成からスナップショットを含めることができます。

詳細設定

  • アセンブリフィルター — コードカバレッジにアセンブリを含めるには「+:assemblyName」と入力し、コードカバレッジにアセンブリを除外するには「-:assemblyName」と入力します。

  • 属性フィルター — この属性でマークされたコードをコードカバレッジから除外するには、「-:attributeName」と入力します。

  • 追加引数dotCover カバー コマンドの追加のコマンドライン引数のリスト。

例: 統合レポートの生成

dotCover ランナーは、必要なプロジェクトをテストし、コードカバレッジレポートを生成するワンストップショップとして使用できます。 次の Kotlin DSL サンプルは、このセットアップを示しています。

// Launching .NET to test a project and generate a report object MyConfig : BuildType({ steps { dotCover { name = "dotCover step with .Net test" id = "dotcover" toolPath = "%teamcity.tool.JetBrains.dotCover.CommandLineTools.DEFAULT%" executable = "%DotNetCLI_Path%" commandLineArguments = """test %teamcity.build.checkoutDir%\ProjectA\proj_A.csproj""" } } }) // Launching .NET to test a project and generate a report object MyConfig : BuildType({ steps { dotCover { id = "dotcover" toolPath = "%teamcity.tool.JetBrains.dotCover.CommandLineTools.DEFAULT%" executable = "%teamcity.tool.JetBrains.dotCover.CommandLineTools.DEFAULT%/dotCover.dll" commandLineArguments = "dotnet --targetWorkingDir=%teamcity.build.checkoutDir% -- test ./ProjectA/proj_A.csproj" } } })

ただし、この単純なシナリオでは、最終結果は、設定で dotNet カバレッジを有効にして .NET ステップを実行した場合と似ています。 dotCover dotCover の真の強みは、さまざまなソースからスナップショットを収集し、結合されたコードカバレッジレポートを生成する機能にあります。 以下のサンプルは、これらのスナップショットの正確なソースに応じて dotCover ランナーを設定する方法を示しています。

単一のビルド構成から

以下のサンプル構成には、異なるプロジェクトをテストする複数の .NET ステップが含まれています。 これらの各ステップでは、 コードカバレッジ で「JetBrains dotCover」が選択されています。 最後の dotCover ステップでは、独自のスナップショットは生成されません。 代わりに、すべての .NET ランナーのスナップショットを収集して、 コードカバレッジタブ に公開される最終的な統合レポートを作成します。

このセットアップでは、 カバレッジレポートを生成 オプションを選択することのみが必要で、他のランナー設定は空のままです。

import jetbrains.buildServer.configs.kotlin.* import jetbrains.buildServer.configs.kotlin.buildSteps.dotCover object ConsolidatedReport : BuildType({ id("consolidatedreport") name = "Code coverate report merged from three .NET steps" steps { dotnetTest { id = "dotnet" projects = "projectA/proj_A.csproj" sdk = "6" coverage = dotcover { toolPath = "%teamcity.tool.JetBrains.dotCover.CommandLineTools.DEFAULT%" } } dotnetTest { id = "dotnet_1" projects = "projectB/proj_B.csproj" sdk = "6" coverage = dotcover { toolPath = "%teamcity.tool.JetBrains.dotCover.CommandLineTools.DEFAULT%" } } // More .NET runners that test separate projects and generate dotCover snapshots dotCover { id = "dotcover" toolPath = "%teamcity.tool.JetBrains.dotCover.CommandLineTools.DEFAULT%" } } })

ビルドチェーンから

以下の ビルドチェーン には、2 つの構成が含まれています。

  • 構成 A では、 .NET ステップを実行して、コードカバレッジを使用して個々のプロジェクトをテストします。 生成された .dcvr スナップショットはアーティファクトとして公開されます。

import jetbrains.buildServer.configs.kotlin.* import jetbrains.buildServer.configs.kotlin.buildSteps.dotCover object ConfigA : BuildType({ name = "Configuration A: Test with code coverage and publish snapshots" // Publish snaphots // Note that the path to the snapshot directory may vary depending on the runner type and/or settings // For example, for NUnit runner use "%teamcity.agent.work.dir%\..\temp\agentTmp\dotNetCoverageResults\*.dcvr" instead artifactRules = """%teamcity.agent.work.dir%\..\temp\agentTmp\*.dcvr""" steps { dotnetTest { id = "dotnet" projects = "projectA/proj_A.csproj" sdk = "6" coverage = dotcover { toolPath = "%teamcity.tool.JetBrains.dotCover.CommandLineTools.DEFAULT%" } } dotnetTest { id = "dotnet_1" projects = "projectB/proj_B.csproj" sdk = "6" coverage = dotcover { toolPath = "%teamcity.tool.JetBrains.dotCover.CommandLineTools.DEFAULT%" } } // ... // More .NET runners that test separate projects and generate dotCover snapshots } })
  • 構成 B の最後の dotCover ステップでは、次のスナップショットを組み合わせて共同レポートを作成します。

    • 構成 B の .NET ステップによって生成されたスナップショット (「プロジェクト C」のテスト)

    • dotCover による「プロジェクト D」のテスト中のスナップショット

    • 構成 A によって生成され、 アーティファクト依存関係を介して構成 B にインポートされたスナップショット

import jetbrains.buildServer.configs.kotlin.* import jetbrains.buildServer.configs.kotlin.buildSteps.dotCover object ConfigB : BuildType({ name = "Configuration B: Test with code coverage, import snapshots, and publish report" steps { dotnetTest { id = "dotnet" projects = "projectC/proj_C.csproj" sdk = "6" coverage = dotcover { toolPath = "%teamcity.tool.JetBrains.dotCover.CommandLineTools.DEFAULT%" } } dotCover { id = "dotcover" toolPath = "%teamcity.tool.JetBrains.dotCover.CommandLineTools.DEFAULT%" executable = "%DotNetCLI_Path%" commandLineArguments = "test ./ProjectD" snapshotPaths = "%teamcity.build.workingDir%/*.dcvr" } } dependencies { artifacts(Build) { buildRule = lastSuccessful() cleanDestination = true artifactRules = "+:*.dcvr" } } })

並列テストから

.NET ランナーは、 並列テスト ビルド機能を使用して、巨大なテストスイートを個別のバッチに分割し、異なるエージェントで実行することができます。 並列テストを含む構成に dotCover ステップを追加した場合、個別のバッチを実行する個別のビルドによって生成されたスナップショットはマージされません。 各個別のビルドは、ビルド結果ページの 概要 タブに独自の結果を表示し、統合レポートを含む コードカバレッジ タブは表示されません。

並列テストによるコードカバレッジ

統合レポートが必要な場合は、 ビルドチェーンから セクションに示されているものと同様のソリューションを使用できます: すべてのバッチからスナップショットを収集し、単一のレポートにマージする依存ビルド構成を作成します。

この使用例の違いは、スナップショットをアーティファクトとして公開する前にスナップショットの名前を変更する必要があることです。 それ以外の場合、各並列ビルドは同一の設定を持つため、スナップショットの名前は同一になり、より高速な並列ビルドの後に終了する各ビルドはそのアーティファクトをオーバーライドします。 詳細については、次のセクションを参照してください: バッチビルドで生成されたアーティファクトを公開

// Primary build configuration // Performs actual tests and generates coverage snapshots object PrimaryConfig : BuildType({ id = AbsoluteId("ConfigA") name = "Build" // use build.parallelTests parameter to generate unique artifact names artifactRules = """%teamcity.agent.work.dir%\..\temp\agentTmp\*.dcvr => Snapshot_%teamcity.build.parallelTests.currentBatch%""" steps { dotnetTest { id = "dotnet_1" projects = "ProjectA/proj_A.csproj" sdk = "6" coverage = dotcover { toolPath = "%teamcity.tool.JetBrains.dotCover.CommandLineTools.DEFAULT%" } } // .NET runners that test separate projects and generate dotCover snapshots } features { parallelTests { numberOfBatches = 2 } } }) // Dependent build configuration // Retrieves snapshots from parallel builds and produces a consolidated report object DotCoverReportConfig : BuildType({ id = AbsoluteId("ConfigB") name = "dotCover Report" steps { dotCover { id = "dotcover" toolPath = "%teamcity.tool.JetBrains.dotCover.CommandLineTools.DEFAULT%" snapshotPaths = "%teamcity.build.workingDir%/*/*.dcvr" } } dependencies { artifacts(DotCoverRunner_ParallelTestsWithOneCommonCoverageReport_Build) { buildRule = lastSuccessful() cleanDestination = true artifactRules = "+:*/*.dcvr" } } })
2026 年 9 月 11 日