dotCover 2018.3ヘルプ

JetBrains TeamCityでカバレッジを設定する

通常、.NETソリューションの継続的インテグレーション(CI)ビルドは、テストのコンパイルと実行を含む一連のタスクで構成されています。JetBrains TeamCity(英語) CIサーバーに関しては、これらのタスクはビルドステップと呼ばれます。TeamCityはdotCover Console Runnerにバンドルされているので、対応するビルドステップオプションを有効にすることでコードカバレッジデータを収集できます。TeamCityが収集したカバレッジ結果は、TeamCity内のレポートとして表示することも、カバレッジスナップショットとしてダウンロードしてVisual Studio内で表示することもできます。

例:アプリケーションとテストアセンブリの2つのプロジェクトからなるシンプルなソリューションがあります。作業は、アプリケーションをコンパイルし、テストを実行し、テストカバレッジ統計を収集する継続的な統合ビルドを設定することです。ワークフローは、使用している単体テストランナーによって異なります。

MSTest / NUnit

MSTestとNUnitのテストランナーは、TeamCityからすぐに提供されるため、一般的に必要なのは、対応するランナーを使用してビルドステップを追加することだけです。

TeamCityでMSTest / NUnitテストのカバレッジ分析を設定するには

  1. TeamCityで、新しいビルドプロジェクト(英語)を作成し、VCSルートを設定します。次に、新しいビルドステップを追加します。プロジェクト内に新しいプロジェクト(英語)新しいビルド構成(英語)作成します(英語)

  2. アプリケーションをビルドする最初のビルドステップを追加します。特定の例では、Visual Studio (sln)ランナー(ビルドエージェントにVisual Studioがインストールされている必要があります)を使用していますが、MSBuildを直接実行したり、バッチファイルを実行したりするなど、ビルド方法に関するその他のオプションがあります。

    tc build step1 compile
    ここでやっているのは解決策を構築することだけです。カバレッジ設定はまだありません。

  3. テストを実行するビルドステップを追加します。MSTestテストを使用する場合は、ランナータイプVisual Studioのテストを選択します。サンプルソリューションはNUnit(英語)テストを使用しているため、NUnitを選択します。ここでは、NUnitのバージョン、.NET実行時のパラメータ、テストアセンブリへのパスも指定します。
    tc build step2 run tests
  4. 今、カバレッジを設定するときです。.NETカバレッジツールでは、JetBrains dotCoverを選択します。

    tc build step2 coverage

  5. アセンブリフィルタでは、カバレッジ対象のアセンブリ(アセンブリ名のみ)を +: の接頭辞として追加し、–:でカバレッジしたくないアセンブリを除外します。この例では、実行中のテストを含む MainTests アセンブリを除外しています。
  6. 設定を保存して実行し、動作の仕方を確認します。

    tc run conf

  7. ビルドが完了すると、概要タブにコードカバレッジに関する短いレポートが表示されます。

    tc overview
    詳細を表示するには、コード・カバレッジタブに切り替えます。ここでは、テストでカバーされたクラス/メソッドの量に関する詳細な統計を表示できます。
    tc code coverage
    あるいは、個々のクラスにドリルダウンしてコードカバレッジを調べることもできます。
    tc source code
    ビルド成果物には、カバレッジファイルが含まれています。
    tc artifacts

  8. 実際の環境では、バイナリをビルドするビルドと、コードカバレッジを収集するビルドの2つのビルド構成があります。その場合、2番目のビルド構成でソースファイルが見つかるように、スナップショット依存関係を使用する必要があります。そうしないと、ソースコードを表示しようとするときに Source code is not available メッセージが表示されます。

    tc no code
    この問題を解決するには、TeamCityのドキュメント(英語)の指示に従ってください。

xUnit

xUnitテストの実行と取得の主な問題は、xUnitがTeamCityによってすぐにサポートされていないことです。これにより、解決しなければならない2つの問題が生じます。

  • xUnitパッケージを提供してソリューションを構築する必要があります。
    バイナリライブラリーをVCSにコミットするのは良い方法ではないので、パッケージを復元するには、コンパイル段階の前に別のビルドステップを実行する必要があります。

  • xUnitテストランナーを用意して手動で実行する必要があります:
    良いニュース:
    • ランナーはNuGetパッケージとして配布されるため、ソリューションの中ですぐに参照され、ビルド中にリストアされます(aを参照)。

    • ランナーがTeamCityサービスメッセージの形式で結果を提供するため、テスト結果を得るために必要な追加のアクションはありません。

TeamCityでxUnitテストのカバレッジ分析を設定するには

  1. Visual Studioで、ソリューションを開きます。テストプロジェクトでは、xunit.runner.console NuGetパッケージへの参照を追加します。

    install xunit console

  2. TeamCityで、新しいビルドプロジェクト(英語)を作成し、VCSルートを設定します。次に、新しいビルド手順を追加します。プロジェクト内に新しいプロジェクト(英語)新しいビルド構成(英語)作成します(英語)

  3. TeamCityがNuGetサーバーとして構成されていることを確認してください。管理 | ツールNuGet.exeテーブルを探し、必要なNuGetバージョンが含まれているかどうかを確認します。そのようなテーブルがない場合は、ツールをインストール...ボタンをクリックして必要な手順に従ってTeamCityにNuGetを追加します。

    tc xunit nuget server

  4. ソリューションによって参照されるNuGetパッケージを復元するビルドステップを追加します。ランナータイプとしてNuGetインストーラを使用してください。

    tc nuget installer step

  5. アプリケーションをビルドするビルドステップを追加します。特定の例では、Visual Studio (sln)ランナー(ビルドエージェントにVisual Studioがインストールされている必要があります)を使用していますが、MSBuildを直接実行したり、バッチファイルを実行したりするなど、ビルド方法に関するその他のオプションがあります。

    tc build step1 compile
    ここでやっているのは解決策を構築することだけです。カバレッジ設定はまだありません。

  6. テストを実行するビルドステップを追加します。
    • xUnitランナーは単純な .exe ファイルとして実行されるため、ランナータイプ.NETプロセスを選択します。

    • ランナーは、ソリューション内でパッケージとして提供されるので、そのソリューションの作業ディレクトリーに対して相対パスを指定することができます。
      %system.teamcity.build.workingDir%SimpleTestsProject\packages\xunit.runner.console.2.3.1\tools\net452\xunit.console.exe

    • コマンド・ライン・パラメーターフィールドには、コンパイルされたテストアセンブリへのパスが含まれている必要があります。

    tc xunit run cover step
  7. 今、カバレッジを設定するときです。.NETカバレッジツールでは、JetBrains dotCoverを選択します。

    tc xunit coverage step

  8. アセンブリフィルタでは、カバレッジ対象のアセンブリ(アセンブリ名のみ)を +: の接頭辞として追加し、–:でカバレッジしたくないアセンブリを除外します。この例では、実行中のテストとxUnitアセンブリに関連するすべてを含む MainTests アセンブリを除外します。
  9. 設定を保存して実行し、動作の仕方を確認します。

  10. ビルドが完了すると、概要タブにテスト結果とコードカバレッジに関する短いレポートが表示されます。

    tc xunit overview
    詳細を表示するには、コード・カバレッジタブに切り替えます。ここでは、テストでカバーされたクラス/メソッドの量に関する詳細な統計を表示できます。
    tc xunit coverage stats
    あるいは、個々のクラスにドリルダウンしてコードカバレッジを調べることもできます。
    tc xunit coverage source code
    ビルド成果物には、カバレッジファイルが含まれています。

MSpec

MSpecはTeamCityの一部でサポートされています。対応するビルドステップランナーがありますが、MSpecテストランナーはバンドルになく、TeamCityエージェントに手動でインストールする必要があります。幸いにも、ランナーはNuGetパッケージとして配布されるため、ソリューション内ですぐに参照され、ビルド中に復元されます。

TeamCityでMSpecテストのカバレッジ分析を設定するには

  1. Visual Studioで、ソリューションを開きます。テストプロジェクトでは、Machine.Specifications.Runner.Console NuGetパッケージへの参照を追加します。

    tc mspec nuget

  2. TeamCityで、新しいビルドプロジェクト(英語)を作成し、VCSルートを設定します。次に、新しいビルド手順を追加します。プロジェクト内に新しいプロジェクト(英語)新しいビルド構成(英語)作成します(英語)

  3. TeamCityがNuGetサーバーとして構成されていることを確認してください。管理 | ツールNuGet.exeテーブルを探し、必要なNuGetバージョンが含まれているかどうかを確認します。そのようなテーブルがない場合は、ツールをインストール...ボタンをクリックして必要な手順に従ってTeamCityにNuGetを追加します。

    tc xunit nuget server

  4. ソリューションによって参照されるNuGetパッケージを復元するビルドステップを追加します。ランナータイプとしてNuGetインストーラを使用してください。

    tc nuget installer step

  5. アプリケーションをビルドするビルドステップを追加します。特定の例では、Visual Studio (sln)ランナー(ビルドエージェントにVisual Studioがインストールされている必要があります)を使用していますが、MSBuildを直接実行したり、バッチファイルを実行したりするなど、ビルド方法に関するその他のオプションがあります。

    tc build step1 compile
    ここでやっているのは解決策を構築することだけです。カバレッジ設定はまだありません。

  6. テストを実行するビルドステップを追加します。
    • ランナータイプMSpecを選択してください。

    • ランナーはソリューション内でパッケージとして提供されるため、ソリューションの作業ディレクトリーに対して相対パスを指定することができます。
      %system.teamcity.build.workingDir%SimpleTestsProject\packages\Machine.Specifications.Runner.Console.0.9.3\tools\mspec-clr4.exe
      プロジェクトのターゲット.NET フレームワークバージョンに対応するランナーバージョンを使用していることを確認してください。

    • からテストを実行するでは、コンパイルされたテストアセンブリへのパスを指定します。

    • 必要に応じて、仕様を含めるおよび仕様を除外するに含める/除外する仕様を指定します。

    tc mspec runner step
  7. 今、カバレッジを設定するときです。.NETカバレッジツールでは、JetBrains dotCoverを選択します。

    tc mspec coverage step

  8. アセンブリフィルタでは、カバレッジ対象のアセンブリ(アセンブリ名のみ)を +: の接頭辞として追加し、–:でカバレッジしたくないアセンブリを除外します。この例では、実行中のテストとMSpecアセンブリに関連するすべてを含む MSpecTests アセンブリを除外しています。
  9. 設定を保存して実行し、動作の仕方を確認します。

  10. ビルドが完了すると、概要タブにテスト結果とコードカバレッジに関する短いレポートが表示されます。

    tc mspec overview
    詳細を表示するには、コード・カバレッジタブに切り替えます。ここでは、テストでカバーされたクラス/メソッドの量に関する詳細な統計を表示できます。
    tc mspec coverage stats
    あるいは、個々のクラスにドリルダウンしてコードカバレッジを調べることもできます。
    tc mspec coverage source code
    ビルド成果物には、カバレッジファイルが含まれています。

最終更新日: 2019年2月14日

関連事項