NUnit 3.0 は現在 TeamCity 9.1.x でサポートされていますが、ランナーをインストールし、ステップで nunit3.console.exe へのパスを指定する必要があります。私の質問は、nunit3-console.exe をどこにコピーすればよいですか? これをすべてのエージェントに適用する必要がありますか? メインの TeamCity サーバーのディレクトリに配置すると、エージェントによって共有またはプルされますか? すべてのエージェントが使用できるように、これらのファイルをコピーする場所に関する適切なドキュメントがないようです。
8 に答える
@NikolayPの答えに基づいて構築:
- NuGet パッケージへの参照を追加します ( https://www.nuget.org/packages/NUnit.Runners/ )。
- 「NuGet インストーラー」ビルド ステップを使用できるパッケージを復元するには、次のブログ投稿を参照してください: 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']"
src.directory
ビルド エージェント上のディレクトリを含むディレクトリを指すように変数を定義するpackages
か、PowerShell スクリプトが機能するために必要なルート ディレクトリを指定する必要があることに注意してください。nunit.consolerunner.directory
また、空のデフォルト値で変数を定義する必要があります。
スクリプトは、何らかの理由で NUnit.ConsoleRunner ディレクトリが見つからない場合にも例外をスローします。
ビルドはエージェントで実行されるため、ビルドを実行するすべてのエージェントに NUnit3 をインストールする必要があります。
TeamCity ランナーにはいくつかの問題があります。具体的には、デフォルトの動作は、NUnit2 (および NUnit3 Visual Studio テスト アダプター) に従って、独自のベース ディレクトリを持つ独自の AppDomains で仕様を実行することではありません。
TeamCity 9.x ビルド シリーズには、この動作を変更できる (現在文書化されていない) 構成プロパティがあります。私はそれについてここに書いた。