NUnit 3.0はTeamCity 9.1.xでサポートされるようになりましたが、ランナーをインストールし、手順でnunit3.console.exeへのパスを指定する必要があります。私の質問は、nunit3-console.exeをどこにコピーすればよいですか?これをすべてのエージェントに配置する必要がありますか?メインのTeamCityサーバー上のディレクトリに配置すると、エージェントによって共有またはプルされますか?すべてのエージェントがそれらを使用できるように、これらのファイルをどこにコピーするかについての適切なドキュメントはないようです。
NUnitテストを実行する各エージェントにNUnitコンソールが必要です。
最良のオプションは次のとおりです。
NuGetパッケージへの参照を追加します( https://www.nuget.org/packages/NUnit.Runners/ )。
「NuGet Installer」ビルドステップを使用してパッケージを復元するには、次のブログ投稿を参照してください。 https://blog.jetbrains.com/teamcity/2013/08/nuget-package-restore-with-teamcity/ =
その後、復元したNuGetパッケージから "packages\NUnit.Console.3.0.0\tools\nunit3-console.exe"のようなパスを設定するだけです。
@NikolayPの答えに基づいて構築:
- NuGetパッケージへの参照を追加します( https://www.nuget.org/packages/NUnit.Runners/ )。
- 「NuGet Installer」ビルドステップを使用してパッケージを復元するには、次のブログ投稿を参照してください。 https://blog.jetbrains.com/teamcity/2013/08/nuget-package-restore-with-teamcity/ =
- その後、復元したNuGetパッケージから "packages\NUnit.Console.3.0.0\tools\nunit3-console.exe"のようなパスを設定するだけです。
次のPowerShellスクリプトを作成して、正しいNUnit.ConsoleRunnerパッケージディレクトリを特定し、NUnitタスクが実行される前にTeamCity変数を設定しました。 NUnit.Consoleパッケージの最新バージョンを使用します。
$SrcDirectory = "%src.directory%"
$PackagesDirectory = Join-Path $SrcDirectory packages
$NUnitConsoleRunnerPackageDirectory = Get-ChildItem (Join-Path $PackagesDirectory NUnit.ConsoleRunner.*) | %{
@{
Directory = $_.FullName
Version = [Version]::Parse(($_.Name -replace "NUnit.ConsoleRunner.",""))
}
} | Sort-Object Version -Descending | Select-Object -First 1 | %{ $_.Directory }
if (!$NUnitConsoleRunnerPackageDirectory) {
throw [IO.DirectoryNotFoundException] "NUnit console runner package directory not found"
}
Write-Output "##teamcity[setParameter name='nunit.consolerunner.directory' value='$NUnitConsoleRunnerPackageDirectory']"
ビルドエージェントのpackages
ディレクトリを含むディレクトリを指すようにsrc.directory
変数を定義するか、PowerShellスクリプトが機能するために必要なルートディレクトリを提供する必要があることに注意してください。空のデフォルト値でnunit.consolerunner.directory
変数を定義する必要もあります。
なんらかの理由でNUnit.ConsoleRunnerディレクトリが見つからなかった場合も、スクリプトは例外をスローします。
また、この指示に従うこともできます: https://confluence.jetbrains.com/display/TCD9/Getting+Started+with+NUnit
ビルドはエージェントで実行されているため、ビルドを実行するすべてのエージェントにNUnit3をインストールする必要があります。
TeamCityランナーにはいくつかの落とし穴があります。具体的には、デフォルトの動作は、NUnit2(およびNUnit3 Visual Studioテストアダプター)のように、独自のベースディレクトリを持つ独自のAppDomainで仕様を実行することではありません。
TeamCity 9.xビルドシリーズには、(現在文書化されていない)構成プロパティがあり、この動作を変更できます。 ここで書きました 。
スクリプト@NathanAldenSrの最新バージョンをお試しください
それでも必要な変数 http://teamcityserver/admin/editProject.html?projectId = yourId&tab = projectParams addnunit.consolerunner.directoryパラメータを構成パラメータに
$SrcDirectory = "%teamcity.build.checkoutDir%"
$PackagesDirectory = Join-Path $SrcDirectory packages
Write-Output "PackagesDirectory" $PackagesDirectory
$NUnitConsoleRunnerPackageDirectory = Get-ChildItem (Join-Path $PackagesDirectory NUnit.ConsoleRunner.*) | %{
@{
Directory = $_.FullName
Version = [Version]::Parse(($_.Name -replace "NUnit.ConsoleRunner.",""))
}
} | Sort-Object Version -Descending | Select-Object -First 1 | %{ $_.Directory }
if (!$NUnitConsoleRunnerPackageDirectory) {
throw [IO.DirectoryNotFoundException] "NUnit console runner package directory not found"
}
$NUnitConsoleRunnerPackageDirectory = Join-Path $NUnitConsoleRunnerPackageDirectory tools
Write-Output "NUnitConsoleRunnerPackageDirectory" $NUnitConsoleRunnerPackageDirectory
Write-Output "##teamcity[setParameter name='nunit.consolerunner.directory' value='$NUnitConsoleRunnerPackageDirectory']"
また、@ NikolayPの答えに基づいて構築します。
NuGetは現在、install
操作のコマンドライン引数-ExcludeVersion
をサポートしています。 docs から:
バージョン番号ではなく、パッケージ名のみで指定されたフォルダーにパッケージをインストールします。
これにより、後続のNUnitランナービルドステップでかなり使いやすいパスが得られ、@ NathanAldenSrの 賢い回避策 を削除できます。
TeamCity 2017.1.3(およびおそらく以前のバージョン)では、この機能はNuGet Installerのパラメーターとして公開されています。ランナー(復元オプションを参照))が、ソリューションパスが必要です。以下の例は、一般的なオンザフライで一時的なNUnitのインストールに適しています。
コピーと貼り付けを簡単にするには(NUnitバージョンを要件に合わせて調整します):
%teamcity.tool.NuGet.CommandLine.DEFAULT%\tools\nuget.exe
install NUnit.Console -Version 3.7.0 -ExcludeVersion -OutputDirectory %system.teamcity.build.tempDir%\NUnit
2018年7月になりましたが、これらの答えはどれもわかりませんでした。各エージェントにコンソールをインストールする必要があるのはなぜですか。もっと良い方法があるはずです。テストを実行するためのビルドステップを追加しているときに、NUnitコンソールツールへのパスの入力の下のテキストに、「チェックアウトディレクトリに対する相対パスがサポートされている」と表示されていることに気付きました。私が行ったのは、ソリューションのテストプロジェクトにnugetパッケージを追加することだけです。 NUnitバージョンv3.10.1を追加してから、NUnit.Console v3.8.0を追加しました。次に、Team Cityで相対パス「packages\NUnit.ConsoleRunner.3.8.0\tools\nunit3-console.exe」を追加しました