TeamCity での NUnit サポート
TeamCity で NUnit テストレポートを設定するには、一般的に次の 2 つの方法があります。
また、代替アプローチを試したり、 TeamCity VSTest Adapter を使用して他のランナー (PowerShell や Command Line など) でテストを実行したりできます。
この記事では、TeamCity での NUnit サポートの詳細と、それを設定するための 代替アプローチ について説明します。
サポートされている NUnit バージョン
次の NUnit バージョンがサポートされています: 2.2.10、2.4.1、2.4.6、2.4.7、2.4.8、2.5.0、2.5.2、2.5.3、2.5.4、2.5.5、2.5.6、2.5.7、2.5.8、2.5.9、2.5.10、2.6.0、2.6.1、2.6.2、2.6.3、3.0。
エージェントマシンに NUnit のいくつかのバージョンをインストールしておき、ビルドに使用することは可能です。
NUnit フレームワークの互換性
次の表は、TeamCity ランナーと .NET 実装との互換性を示しています。
.NET フレームワーク 1、1.1、2、3.5 | .NET フレームワーク 4+ | .NET Core1 以降および .NET5 以降 | |
|---|---|---|---|
NUnit ランナー
|
|
|
|
.NET ランナー
|
|
|
|
他のランナーの VSTest アダプター |
|
|
|
代替アプローチ
NUnit または .NET ビルドランナーを使用できない場合、TeamCity では TeamCity で NUnit テストレポートを構成するための次の方法が用意されています。
標準の NAnt ビルドランナー用 NUnit。
MSBuild ビルドスクリプトで構成するか、 コマンドラインから起動できる NUnit テストランチャー。
NUnit 用 TeamCity アドイン を使用すると、ビルド手順を変更せずに NUnit レベルでレポートを有効にできます。
バンドルされている XML Test Reporting plugin により、任意の XML レポートを TeamCity にインポートできます。 この場合、結果をリアルタイムでトラックできるとは限りません。
ビルド構成に XML レポート処理 ビルド機能を追加するか、次のサービスメッセージを使用できます:##teamcity[importData type='sometype' path='<XML ファイルへのパス>']。 詳細: XML Report Processing、 XML レポートのインポート。サービスメッセージを介して手動でテストレポートを構成します。
代替アプローチの機能比較
アプローチ | リアルタイムレポート | CLI ベースのランナーでの実行 | 並べ替えのテスト | 暗黙的な TeamCity .NET カバレッジ |
|---|---|---|---|---|
\<nunit2\> NAnt タスク |
|
|
|
|
\<NUnit\> MSBuild タスク |
|
|
|
|
\<NUnitTeamCity\> MSBuild タスク |
|
|
|
|
NUnit 用 TeamCity アドイン |
|
|
|
|
TeamCity NUnit テストランチャー |
|
|
|
|
XML レポーティングプラグイン |
|
| なし | なし |
* TeamCity 提供のタスクは、構文 / 動作が異なる場合があります。 TeamCity なしでスクリプトを実行するには、回避策が必要になる場合があります。
TeamCity では、一般的なテストレポート機能に加えて、プラットフォームとランタイム環境のバージョンを明示的に指定することで、x64 マシン上の x86 プロセスで NUnit テストを実行できます。 MSIL、x64 または x86 プラットフォームで開始された .NET フレームワーク 1.1, 2.0, 4.0 を使用するかどうかを定義できます。
NUnit テストランチャー
TeamCity は、コマンドラインから使用できる独自の NUnit テストランチャーを提供します。 テストは渡されたパラメーターに従って実行され、プロセスが TeamCity ビルドエージェント環境内で実行されている場合、結果は TeamCity エージェントに報告されます。
次のコマンドラインオプションを TeamCity NUnit テストランチャーに渡すことができます。
オプション | 説明 |
|---|---|
| テストを実行する .NET フレームワークのバージョン。 許容値は バージョン 1.1、 v2.0、 v4.0、 任意 です。 |
| テストを実行するプラットフォーム。 許容値は x86 アーキテクチャ、 x64、 Microsoft 中間言語 です。 .NET フレームワーク 1.1 の場合、 Microsoft 中間言語 オプションのみが使用可能です。 |
| 使用するテストフレームワーク。 値は次の形式で指定する必要があります: |
|
|
|
|
| 使用するサードパーティの NUnit アドインのリスト(オプション)。 |
|
|
| 新しいプロセスで各アセンブリを実行するように指定します。 |
カテゴリ式
NUnit 2.4.6 から NUnit v3.0 まで (ただし NUnit v3.0 は含みません)、 カテゴリ式を使用できます。 次の表にいくつかの例を示します。
式 | アクション |
|---|---|
A|B|C | カテゴリ A、B、または C のいずれかを持つテストを選択します。 |
A,B,C | カテゴリ A、B、または C のいずれかを持つテストを選択します。 |
A+B+C | 3 つのカテゴリすべてが割り当てられているテストのみを選択します。 |
A+B|C | A と B の両方、またはカテゴリ C のテストを選択します。 |
A+B\-C | A と B の両方でテストを選択しますが、C は選択しません。 |
-A | カテゴリ A が割り当てられていないテストを選択します。 |
A+(B|C) | カテゴリ A と B または C の両方を持つテストを選択します。 |
A+B,C | カテゴリ A と B または C の両方を持つテストを選択します。 |
注:: 最後の 2 つの例で示されているように、コンマ演算子 (、) はパイプ (または) と同等ですが、優先順位が高くなります。 評価の順序は次のとおりです。
単項除外演算子(
-)。優先順位の高いユニオン演算子(
、)。交差および集合減算演算子(
プラスおよびバイナリ-)。優先順位の低いユニオン演算子(
または)。
演算子文字には特別な意味があるため、名前に演算子文字のいずれかを使用するカテゴリを作成しないでください。 例: カテゴリ db-tests は、" カテゴリテストを除いてカテゴリ db を実行する " という意味になるため、コマンドラインで使用しないでください。 使用しているシェルに対して特別な意味を持つ文字にも同じ制限が適用されます。
次の例では、 teamcity.dotnet.nunitlauncher プロパティが ビルド構成設定 の パラメーター ページでシステムプロパティとして設定されていることを前提としています。
アセンブリからテストを実行します。
NUnit カテゴリフィルターを使用してアセンブリからテストを実行します。
アセンブリからテストを実行します。
NAnt ビルドランナー用 NUnit
このセクションでは、構成済みの nunit2 タスクを含む NAnt ビルドスクリプトがすでにあり、既存のビルドスクリプトを変更せずに TeamCity でテストレポートを追跡したい場合を想定しています。 それ以外の場合は、ビルド構成の手順の 1 つとして NUnit ビルドランナーを追加することを検討してください。
標準の nunt2 タスクを介して NAnt ビルドで定義されたテストを追跡するために、TeamCity はカスタム タスク実装を提供し、元の <nunit2> タスクを独自のタスクに自動的に置き換えます。 ビルドがトリガーされると、TeamCity は <nunit2> の独自実装を使用して TeamCity NUnit テストランチャーを起動します。 これにより、ビルドスクリプトを変更せずにそのままにして、TeamCity でオンザフライのテストレポートを受け取ることができます。
TeamCity で元の nunit2 タスクを置き換えたくない場合は、次のオプションを検討してください。
NUnit 用 TeamCity アドインとともに NUnit コンソールを使用します。
XML テストレポートプラグインを介して XML テスト結果をインポートします。
コマンドライン NUnit テストランチャーを使用します。
サービスメッセージを使用して、レポート対象のテストを手動で構成します。
nunit2タスクの置換を使用不可にするには、teamcity.dotnet.nant.replaceTasksシステムプロパティを偽に設定します。
TeamCity の nunt2 タスク実装は、ビルドスクリプト内の NAnt <プロパティ> タスクとして、または システムプロパティ として ビルド構成 | ビルドパラメーター 配下で指定できる追加オプションをサポートします。
TeamCity <nunit2> タスク実装では、次のオプションがサポートされています。
プロパティ | 説明 |
|---|---|
| 失敗したテストの数に関係なく、 すべてのテスト を実行します。 少なくとも 1 つのテストが失敗した場合は失敗します。 |
| x64 マシン上の .NET 2.0 に必要なランタイム実行モードを設定します。 サポートされる値は x86 アーキテクチャ、 x64、 任意 (デフォルト)です。 |
| 必要な .NET フレームワークバージョンを設定します。 サポートされている値は、 バージョン 1.1、 v2.0、 v4.0 です。 デフォルト値は、NAnt ターゲットフレームワークと同じです。 |
| 使用する NUnit ランナーのバージョンを指定します。 値は次の形式で指定する必要があります: エージェントマシンに NUnit のいくつかのバージョンをインストールしておき、ビルドに使用することは可能です。 |
| NAnt ビルドランナーに使用されるサードパーティの NUnit アドインのリストを指定します。 |
| 新しいプロセスで各アセンブリを実行する場合は、 |
TeamCity NUnit テストランチャーは、NAnt ターゲットフレームワークによって指定された .NET Framework、つまり .NET Framework 1.1、2.0、4.0 ランタイムでテストを実行します。 TeamCity は <nunit2> タスクのテストカテゴリもサポートしています。
リストされたプロパティを NAnt ビルドスクリプトに追加すると、TeamCity に依存するようになります。 これを回避するには、 ビルド構成 でシステムプロパティとしてプロパティを指定するか、 <if> タスクを追加することを検討してください。
例
開始テストは、.NET 2.0 の x64 モードで単一のアセンブリファイルを形成します。
C2 ではなく、カテゴリ C1 からすべてのテストを実行します。
テストの実行に使用する NUnit のバージョンを明示的に指定します。
この場合、次のプロパティを 前nunit2 タスク呼び出しに追加する必要があることに注意してください。
MSBuild で NUnit を使用する
このセクションでは、MSBuild から NUnit を使用する方法について説明します。
MSBuild ビルドで NUnit タスクを使用する
このセクションでは、構成済みの NUnit タスクを含む MSBuild ビルドスクリプトがすでにあり、既存のビルドスクリプトを変更せずに TeamCity でテストレポートを追跡したい場合を想定しています。 それ以外の場合は、ビルド構成のステップの 1 つとして NUnit ビルドランナーを追加することを検討してください。
MSBuild ビルドスクリプトで NUnitTeamCity タスクを使用する
TeamCity は、 MSBuild Community tasks プロジェクトの NUnit タスクと互換性のあるカスタム NUnitTeamCity タスクを提供します。 ビルドスクリプトで NUnitTeamCity タスクを提供すると、TeamCity はタスク内で指定されたオプションに基づいて独自のテストランナーを起動します。 そのため、TeamCity がテストを実行するので、NUnit ランナーは必要ありません。
NUnitTeamCity タスクを正しく使用するには:
teamcity_dotnet_nunitlauncherシステムプロパティがビルドエージェントでアクセス可能であることを確認してください。 Windows を実行しているビルドエージェントは、これらのプロパティを環境変数として自動的に検出します。 手動で設定する必要がある場合は、詳細については「agent-specific プロパティの定義」を参照してください。次の構文を使用して、
NUnitTeamCityタスクで MSBuild ビルドスクリプトを構成します。<UsingTask TaskName="NUnitTeamCity" AssemblyFile="$(teamcity_dotnet_nunitlauncher_msbuild_task)" /> <NUnitTeamCity Assemblies="@(assemblies_to_test)" />
NUnitTeamCity タスクは、次の属性をサポートしています。
プロパティ | 説明 |
|---|---|
| x64 マシンの実行モード。 サポートされる値は、 x86 アーキテクチャ、 x64、 任意 です。 |
| 使用する .NET フレームワーク: バージョン 1.1、 v2.0、 v4.0、 任意。 デフォルトでは、MSBuild ランタイムが使用されます。 MSBuild 2.0 および 3.5 の場合、デフォルトは v2.0 です。 MSBuild 4.0 の場合、デフォルト値は v4.0 です。 |
| MSBuild コミュニティタスク(英語)プロジェクトの |
| MSBuild コミュニティタスク(英語)プロジェクトの |
| テストの実行に使用される NUnit のバージョン。 NUnit 3.0 以降を使用する場合は、 以下のセクションを参照してください。 |
| 使用するサードパーティの NUnit アドインのリスト。 NUnit アドインの使用に関する詳細については、 NUnit アドインサポート セクションを参照してください。 |
| いずれかのテストが失敗した場合にタスクを失敗させる場合は 真。 |
| テストを実行するアセンブリのリスト。 |
| 各アセンブリを新しいプロセスで実行する場合は、 |
カスタム TeamCity NUnit タスクは追加の属性もサポートしています。 使用可能な属性のリストについては、 このセクションを参照してください。
サードパーティの NUnit アドインをサポートする TeamCity テストランナーが必要な場合は、詳細について NUnit アドインサポート セクションを参照してください。
例(MSBuild ビルドスクリプトの一部):
重要な注記
MSBuild スクリプトで システムプロパティを使用する場合は、必ず
。を_に置き換えてください。 たとえば、teamcity.dotnet.nunitlauncher.msbuild.taskの代わりにteamcity_dotnet_nunitlauncher_msbuild_taskを使用します。TeamCity は、Microsoft Visual Studio 2005 以降のソリューションファイル用に Visual Studio ソリューションランナーも提供しています。 これにより、アセンブリで単体テストを実行する際に MSBuild スタイルのワイルドカードを使用できます。
例
特定の NUnit ランナーバージョンを使用して NUnit テストを実行します。
NUnit 2.4.6 を使用してカスタムアドインを使用して NUnit テストを実行します。
NUnit 2.4.6 アセンブリごとのモード: を使用して、カスタムアドインを使用して NUnit テストを実行します。
TeamCity に依存しないビルドスクリプトを作成するには、次のオプションを検討してください。
TeamCity から開始した場合、MSBuild プロパティ TEAMCITY_VERSION が MSBuild に追加されます。
NUnit 3.0 を使用する
バージョン 3.0 以降、NUnit は TeamCity をネイティブにサポートしているため、 以前の NUnit バージョンで行っていたように MSBuild 用の特別なタスクを使用する必要はありません。 最も簡単な方法は、標準の 実行タスク(英語)を介して NUnit コンソールを実行することです。
NUnit 入門の記事には、詳細と例が含まれています。
MSBuild サービスタスク
MSBuild の場合、TeamCity は ビルドスクリプトの操作 と同じオプションを実装する次のサービスタスクを提供します。
TeamCitySetBuildNumber では、ビルド番号を変更できます。
{build.number} を古いビルド番号のプレースホルダーとして使用できます。
TeamCityProgressMessage では、進行状況メッセージを書き込むことができます。
TeamCityPublishArtifacts では、MSBuild アイテムグループのすべてのアーティファクトを公開できます。
TeamCityReportStatsValue は、統計値を公開するための便利なタスクです。
TeamCityBuildProblem は、実際にビルドに失敗するビルドの問題を報告します。 ビルドの問題は ビルド結果 ページに表示され、ビルドステータステキストにも影響します。
必須の
説明属性は、ビルドの問題を説明する人間が読めるテキストです。 デフォルトでは、説明はビルドステータステキストに表示されます。識別子はオプションの属性であり、特定のビルド問題インスタンスを特徴付けます。 同じ問題が発生した場合(たとえば、同じコンパイルエラー)、ビルド全体で変更されるべきではありません。 最大 60 文字の有効な JavaID である必要があります。 デフォルトでは、識別子は説明に基づいて計算されます。
TeamCitySetStatus は、現在のビルドステータステキストを変更するタスクです。
{build.status.text は、古いステータステキストに置き換えられます。 ステータスには SUCCESS 値を指定できます。
NUnit アドインサポート
NUnit アドインは、NUnit コアにプラグインし、動作方法を変更する拡張機能です。 詳細については、 NUnit アドインページ(英語)を参照してください。 このセクションでは、NAnt、MSBuild、NUnit ConsoleLauncher の NUnit アドインサポートについて説明します。
NAnt ビルドランナーでアドインを使用する
NAnt ビルドランナーで NUnit アドインをサポートするには、 teamcity.dotnet.nant.nunit2.addins プロパティをビルドスクリプトに追加する必要があります。
ここで、 <リスト> は、 ; で区切られた NUnit アドインへのパスのリストです。
例:
TeamCity NUnit コンソールランチャーでアドインを使用する
コンソールランチャーの NUnit アドインをサポートするには、 /addins:<; で区切られたアドインのリスト> コマンドラインオプションを提供する必要があります。
例:
MSBuild でアドインを使用する
このセクションは NUnit 3.0 より前のバージョンに適用可能 です。
MSBuild ランナーの NUnit アドインをサポートするには、 NUnitTeamCity タスクの Addins プロパティを指定します。
ここで、 <リスト> は、 ; または 、 で区切られたアドインのリストです。
例:
NUnit 用 TeamCity アドイン
TeamCity NUnit アドインは バージョン 3.0 より前の NUnit をサポートします。 それ以降のバージョンについては、 このセクションを参照してください。
NUnit コンソール経由で NUnit テストを実行し、TeamCity テストランナーを起動せずに TeamCity でテスト結果を追跡したい場合、最適な解決策は NUnit 用 TeamCity アドインを使用することです。 このアドインを NUnit にプラグインすると、テストは TeamCity サーバーに自動的に報告されます。
または、 XML Report Processing ビルド機能を使用するか、 サービスメッセージを使ってテストレポートを手動で構成することもできます。
TeamCity でテスト結果を確認できるようにするには:
ビルドで、TeamCity アドインへのパスをシステムプロパティ
teamcity.dotnet.nunitaddin(MSBuild の場合はteamcity_dotnet_nunitaddin) に設定し、このパスの末尾に NUnit のバージョンを追加します。 例:NUnit 2.4.X の場合は
${teamcity.dotnet.nunitaddin}-2.4.X.dll(MSBuild の場合:$(teamcity_dotnet_nunitaddin)-2.4.X.dll) を使用します。
NUnit 2.4.7 の例:NAnt: ${teamcity.dotnet.nunitaddin}-2.4.7.dll、MSBuild:$(teamcity_dotnet_nunitaddin)-2.4.7.dll。NUnit 2.5.0 alpha 4 の場合は、
${teamcity.dotnet.nunitaddin}-2.5.0.dll(MSBuild の場合は$(teamcity_dotnet_nunitaddin)-2.5.0.dll) を使用します。
.DLLと.pdbの TeamCity アドインファイルを NUnit アドインディレクトリにコピーします。
これらのファイルを一度だけコピーすることもできますが、TeamCity によって更新される可能性があるため、TeamCity アドインファイルが 各ビルド 用の NUnit アドインディレクトリにコピーされるようにビルドを構成することを強くお勧めします。
次の例は、NUnit 2.4.7 用 TeamCity アドインを使用して NUnit コンソールランナーを使用する方法を示しています (MSBuild の場合)。
NUnit の 環境変数を明示的に設定する必要がある場合は、 %system.teamcity.dotnet.nunitaddin% の値参照を使用して環境変数を指定します。 詳細については、 この記事を参照してください。
NUnit 2.4.8 の課題
NUnit 2.4.8 には次の既知の課題があります: NUnit 2.4.8 ランナーは、作成された AssemblyName オブジェクトに従ってアセンブリを読み込もうとします。 ただし、NUnit 2.4.8 の addins フォルダーは、アプリケーションのプローブパスに含まれていません。 その結果、NUnit 2.4.8 はコンソールモードでアドインを読み込めません。
この問題を解決するには、次のいずれかの回避策を使用することをお勧めします。
TeamCity アドインアセンブリを、NUnit
binディレクトリとbin/addinsディレクトリの両方にコピーします。NUnit-Console.exe.configにパッチを適用して、アプリケーションプローブパスへのアドインを含めます。 次のコードをconfig/runtime要素に追加します。<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <probing privatePath="addins"/> </assemblyBinding>