NUnit を使ってみる
このチュートリアルは、TeamCity で NUnit 3(英語) を使用する基本的な方法を説明することを目的としています。テストプロジェクトとスクリプトのサンプルは こちらで確認できます(英語)。ユースケースの順序は、関連する TeamCity 機能の数に基づいています。最初のケースは最も基本的でより複雑なケースであり、以下はより多くの機能を利用します。すべての機能に精通し、それらの長所と短所を見つけてから、どちらかを選択することをお勧めします。
NUnit のインストール
NUnit ビルドランナーを使用するには、次のいずれかのオプションを使用して NUnit NuGet パッケージ(英語)を TeamCity エージェントにインストールする必要があります。
最初のビルドステップで、NuGet パッケージから NUnit をインストールするように指示します。
例: 次のように、
NUnit.ConsoleNuGet パッケージをインストールするコマンドラインビルドステップを追加できます。%\teamcity.tool.NuGet.CommandLine.DEFAULT%\tools\nuget.exe install NUnit.Console -version 3.6.0 -o packages%teamcity.tool.NuGet.CommandLine.DEFAULT%文字列は、TeamCity エージェントにインストールされた NuGet への参照です。管理 | ツールページでエージェントに NuGet をインストールできます。また、インストール済みの NuGet バージョンのいずれかをデフォルトとしてマークすることもできます。
その後、
%teamcity.tool.NuGet.CommandLine.DEFAULT%パラメーター参照はエージェント上の NuGet インストールパスに適切に解決されるはずです。
すると、パッケージディレクトリに nunit3-console が表示されます。NUnit をすべてのビルドエージェントの標準の場所に手動でインストールし、NUnit ビルドステップで
nunit-console.exeへのパスを構成します。
拡張機能のインストール
バージョン 3.2.0 以降、NUnit では TeamCity エージェントに NUnit.Extension.NUnitProjectLoader 拡張機能がインストールされている必要があります。バージョン 3.4.1 以降、NUnit では TeamCity エージェントに NUnit.Extension.TeamCityEventListener 拡張機能がインストールされている必要があります。
バージョン 3.2.0 および 3.2.1 で拡張機能が見つからない場合、警告なしでビルドが失敗します。バージョン 3.4.1 以降では、拡張機能をインストールするように勧めるメッセージが表示されます。
拡張機能は、NUnit コンソールバージョン 3(英語) NuGet パッケージを使用して、個別のパッケージとして、または一括でインストールできます。
ケース 1. コマンドライン
バージョン 3 以降、NUnit はすぐに使える TeamCity をサポートします。これにより、コマンドラインからテストを実行でき、基本機能の TeamCity-NUnit 統合を維持できます。NUnit は、TeamCity によって実行されているかどうかを自動的に検出し、実行されている場合は統合モードに切り替えます。
NUnit 3 コンソールは、自動検出に加えて、TeamCity との統合も含む特別な --teamcity 引数を処理します。この引数は、詳細なテスト情報、テストの順序など、NUnit が TeamCity に送信する情報を確認する必要がある場合に、デバッグの目的で使用できます。
テストを実行する最も簡単な方法は、コマンドラインから NUnit コンソールを使用することです。TeamCity は、コマンドラインに次の統合の基本機能を提供します。
テストの実行中にビルドログでテスト実行情報を報告する
テスト終了時にテスト結果を報告する
すべての TeamCity 調査機能
コマンドラインからテストを実行する TeamCity ビルドステップは次のようになります。

要約すると、この単純なケースでは、TeamCity-NUnit 3 統合の基本機能を使用できます。
ケース 2. MSBuild
この使用例は以前のものと非常に似ていますが、.NET プロジェクトで最も広く使用されているビルドプラットフォームである MSBuild を対象としています。
TeamCity は、すぐに使用できるコードカバレッジ統計の収集をサポートしています。追加のプラグインをインストールして、TeamCity で JetBrains dotTrace(英語) および JetBrains dotMemory ユニット(英語)を使用することもできます。
プロジェクトファイル(英語)は簡単です。テストを起動する実行(英語)タスクが実行されます。
NUnit コンソールは失敗したテストの数を正の終了コードとして返し、NUnit テストインフラストラクチャの障害の場合は負の終了コードとして返します。
TeamCity はテスト実行の進行を制御しますが、NUnit インフラストラクチャの例外により、TeamCity が必要な情報を収集できない場合があります。そのため、IgnoreExitCode="True" 属性を設定する必要があります。これは、肯定的な終了コードを無視し、いくつかの失敗したテストのためにビルドを中断しません。エラー(英語)タスクは、負の終了コードのテストインフラストラクチャエラーの場合にビルドを停止します。

プロジェクトファイルに加えて、MSBuild バージョンとターゲットプラットフォームを定義し、プロファイルとその他の設定を使用できます。
ビルドをより安定させるために、プロジェクトファイルにいくつかの変更を加えることができます。例: NUnit コンソールへのパスは動的に定義できます。このパスは NUnit コンソールの NuGet パッケージのアップデートによって変更されるかもしれませんが、私たちのビルド設定は何の変更も必要としません。以下のコードは、pathToNUnitConsole 変数への NUnit コンソールへのパスを取得します。
テストするアセンブリを動的にリストできます。例: 特定のディレクトリで検索し、正規表現パターンに一致するようにフィルターします。
次のプロジェクトファイルにはいくつかの例が含まれています: sample2adv.proj (英語)、 unit-utils.targets (英語)。
ケース 3. NUnit ビルドステップ
NUnit ランナーは .NET フレームワークのみをサポートすることに注意してください。.NET Core プロジェクト(および .NET フレームワークプロジェクトバージョン 4.0 以降)のテストを実行するには、代わりに test コマンドで .NET ビルドランナーを使用します。詳細は NUnit のサポートのページを参照してください。
NUnit ビルドステップは、おそらく TeamCity で NUnit テストを起動する最もシンプルでありながら最も強力な方法です。
ほとんどの場合、2 つのパラメーターを設定するだけで十分です。NUnit コンソールランナーへのパスとテストするアセンブリのリスト。

NUnit ランナーフィールドは、テストの実行に使用される NUnit のバージョンを定義します。NUnit 3 のビルドステップを構成する場合、NUnit コンソールランナーへのパスフィールドに NUnit コンソールへのパスを含める必要があります。ファイル名を含むコンソール実行可能ファイルへのパスを指定します。
すべての例で、NuGet パッケージマネージャーは NUnit インフラストラクチャを提供します。NuGet を使用すると、ユーザーはテスト環境を便利に管理し、NUnit を更新し、TeamCity で実行されるようにテストをローカルで実行できます。
NUnit ビルドステップは、TeamCity で NUnit テストを実行するための簡単で使いやすい方法です。Mono(英語) を使用して、異なる OS で実行中のテストの詳細を同時に隠すオプションの最大範囲を提供します。
ケース 4. NUnit ビルドステップ、オプション
NUnit 3 の NUnit ビルドステップを構成する場合、NUnit コンソールランナーを指定する必要があります(プリインストールツールを選択するか、カスタムパスを入力します)。
他のフィールドはたくさんの便利なオプションを提供し、このセクションはそれらのいくつかを論じます。

オプションの 1 つは、アプリケーション構成ファイルを定義することです。テストでは構成ファイルからデータを取得する場合があり、これを容易にするために、アプリケーション構成ファイルへのパスフィールドでテストを実行するときに使用するアプリケーション構成ファイルへのパスを定義する必要があります。パスは、ビルドチェックアウトディレクトリに対する絶対パスまたは相対パスにすることができます。残念ながら、NUnit では、ビルドステップごとに 1 つの構成ファイルしか許可されないという制限があります。この制限により、1 つのビルドステップで異なる構成を持つ複数のアセンブリをテストする必要がある場合は、複数のアプリケーション構成ファイルを共通の構成ファイルに集約する必要があります。それが不可能な場合は、テストの起動を複数のステップに分割し、各ステップで構成ファイルを定義します。
NUnit 3 コンソールには、コマンドライン引数で定義された多数の設定があります。追加のコマンドラインパラメーターフィールドでは、NUnit コンソールのコマンドラインパラメーターの多くを設定できますが、いくつかの制限があります。
--whereコマンドライン引数は、優先度テストのフィルタリング設定として使用されます。NUnit カテゴリが含まれていますまたは NUnit カテゴリを除外フィールドと同時に使用して、カテゴリ別にテストをフィルタリングすると、TeamCity はこれらのオプションを無視します。警告が表示され、--where引数のみが使用されます。追加のコマンドラインパラメーターフィールドで以下のパラメーターを使用すると、ビルドが失敗する可能性があります。
コマンドラインのサイズ制限のため、NUnit ビルドステップで NUnit プロジェクトファイルからアセンブリのリストが決定されるため、テストするアセンブリのリスト
TeamCity が独自の一時的な NUnit プロジェクトファイルを作成するため、NUnit プロジェクトファイル ( 以下を参照してください)
--work: NUnit ビルドステップはビルドチェックアウトディレクトリをベースディレクトリとして使用します--noheaderがデフォルトで使用されます.NET ランタイム | プラットフォームフィールドが
x86に設定されている場合は--x86.NET ランタイム | 版が
auto以外に設定されている場合は--framework以下のアルゴリズムが使用されている場合は
--explore
NUnit ビルドステップは、以前のビルドで失敗したテストを最初に実行するように設定できます。アイデアは、完成したビルドの可能性のある状態について結論を出す時間を節約するということです。テスト失敗のフィードバック時間を短縮フラグが設定されている場合、前のビルドがテストに失敗した場合、テストは 3 つのステップで実行されます。
1\. 最初のステップとして、TeamCity は、カテゴリ別のフィルターを考慮してアセンブリのすべてのテストリストを取得し (--explore コンソール引数を使用)、前のステップ実行の統計を分析して、優先リストと残りの 2 つのテストリストを作成します。優先リストには、前のビルドで失敗したテストが含まれます。
2\. このステップでは、優先テストが実行されます。
3\. 残りのテストは以下のとおりです。
NUnit ビルドステップのもう 1 つの優れた機能は、構成を変更せずに、異なる OS で同じ方法でテストを実行するという事実です。これは、本格的な .NET が利用できないエージェントが Mono(英語) を持っている場合に当てはまります。ビルド構成を OS に依存しないようにすることができます。
NUnit テストをデバッグする
ユーザーがテストを実行するために TeamCity によって実行されるすべてのアクションは、コマンドラインで再現できます。これにより、ビルドの構成に関する潜在的な問題を迅速かつ効果的に解決できます。
TeamCity は、テストの実行に関連するすべてのデータをビルドログに記録します。TeamCity がテストの実行に使用するコマンドは、ビルドログからコピーして、ローカルまたはエージェントのコマンドラインから実行できます。
コマンドを実行する以外にテストを実行すると、TeamCity は一時ファイルを作成します。
NUnit プロジェクトファイル
JetBrains dotCover
JetBrains dotTrace または JetBrains dotMemory ユニット構成ファイル
これらは非表示のビルドアーティファクトに含まれています。たとえば、ケース 4 のテストを起動するコマンドラインは、ビルドログで次のように表示されます。
この場合、5Oqkbf9J2qJNkUK4KEtKvxs8TFFnlrno.nunit は NUnit プロジェクトファイルであり、非表示のビルドアーティファクトからダウンロードできます。

関連ページ:
コマンドライン (スクリプト)
コマンドライン(ビルド構成内)またはスクリプト(パイプライン内)は、TeamCity の中で最も柔軟なビルドステップです。エージェントマシン上で直接コマンドを実行するため、インストールされている任意のツール(cURL、Homebrew、Python、Unreal Engine など)との連携が可能になります。ツール固有の TeamCity ステップの代替として使用することもできます。たとえば、ゴールで Maven ステップを使用する代わりに、スクリプトを実行します。ステップ設定:スクリプトステップ...
ビルドとテストの失敗への対処
ビルドの実行中、通常、次のいずれかの種類の障害が発生する可能性があります。テストの失敗 - ビルド中に試行されたユニットテストまたは機能テストの失敗。ビルドの問題 - ビルド中に発生したその他の問題: リモートリポジトリにアクセスできない、ビルドアーティファクトの取得またはアップロードに失敗する、コンパイルエラーなど。ビルドの問題を表示:TeamCity では、ビルドの問題を検出して調査する方法が複数あります。ビルド結果ページビルド結果ページには、この個々のビルド実行に関する最も詳細な情報が表示さ...
追加のプラグインをインストールする
プラグインは、TeamCity サーバーに機能を追加できます。JetBrains マーケットプレイスで入手できます。JetBrains プラグインリポジトリからのプラグインのインストール:リポジトリからプラグインをインストールするには:TeamCity の管理 | プラグインに移動し、プラグインリポジトリを参照するをクリックします。リポジトリにリダイレクトされます。必要なプラグインを見つけて、取得をクリックしてから、http[s]://\<teamcityUrl\> にインストール...
ビルドログ
ビルドログは、ビルドの拡張コンソール出力です。ビルド中に発生したイベントの構造化されたリストで表されます。通常、ビルドログには、TeamCity が実行したアクションのエントリと、ビルド中に起動されたプロセスの出力が含まれます。TeamCity はプロセスの出力をキャプチャーし、階層表示を可能にする内部形式で保存します。ビルドログを表示する:完全なログの詳細を表示するには、ビルド結果ページに移動し、ビルドログタブに切り替えます。このタブには次の UI 要素が表示されます。すべて展開 / すべて折り...
JetBrains Space 用に CI/CD を構成する方法
JetBrains Space は、ソフトウェア開発チーム向けのフルサイクルコラボレーションソリューションです。このガイドでは、JetBrains Space プロジェクトを TeamCity と統合することで、JetBrains Space プロジェクトの継続的な統合と配信を実現する方法について説明します。TeamCity との統合により、JetBrains Space ユーザーに次の利点がもたらされます。同じ環境内でのプロジェクトのコンパイル、テスト、デプロイ。マージリクエストのソースコードを...
PHP を始めよう
導入:TeamCity は、多くのテクノロジーで継続的インテグレーション (CI) プロセスをサポートします。このチュートリアルでは、PHP プロジェクトの継続的インテグレーション (CI) プロセスを構成します。CI を提供するサンプルプロジェクトとして、オープンソースの PHP プロジェクト PHPExcel を使用します。このプロジェクトには大量のコードが含まれており、PHPUnit はテストを行い、Phing を使用してビルドアーティファクトを作成します。TeamCity を使用してビルド...