Ich muss nur etwas Code ausführen, wenn ich innerhalb des TeamCity Test Launchers laufe. Was ist der einfachste Weg, dies zu erkennen?Wie kann ich feststellen, ob ein NUnit-Test in TeamCity ausgeführt wird?
Antwort
Überprüfen Sie, ob TEAMCITY_VERSION Umgebungsvariable definiert ist.
Ein anderer Ansatz besteht darin, NUnit-Kategorien zu verwenden.
private static bool IsOnTeamCity()
{
string environmentVariableValue = Environment.GetEnvironmentVariable("TEAMCITY_VERSION");
if (!string.IsNullOrEmpty(environmentVariableValue))
{
return true;
}
return false;
}
Dies ist ein funktionierender Code, der auf Eugenes Idee basiert: private static bool IsOnTeamCity() { string environmentVariableValue = Environment.GetEnvironmentVariable ("TEAMCITY_VERSION"); wenn { return true (string.IsNullOrEmpty (environmentVariableValue)!); } Rückgabe false; } –
So vereinfacht dies funktionieren soll (?): 'Rückkehr string.IsNullOrEmpty (Environment.GetEnvironmentVariable ("TEAMCITY_VERSION"))' Warum die extra hinzufügen 'if' dass wieder nur' true/false'anyway!? – NiKiZe
ich, dass mit der folgenden Eigenschaft im Grunde so mache:
Basierend auf dem Kommentar unter diesem Code soll, wenn der Test von Teamcity laufen wird, ist überprüfen kann. Es erhält den Verzeichnisnamen über die Code-Basis der aufrufenden Assembly und wenn es Teile Ihres TeamCity-Build-Agent-Verzeichnisses enthält, wird es in TeamCity ausgeführt.
public static bool IsTeamCity
{
get
{
// the Assembly.GetExecutingAssembly().Location property gives funny results when using
// NUnit (where assemblies run from a temporary folder), so the use of CodeBase is preferred.
string codeBase = Assembly.GetCallingAssembly().CodeBase;
string assemblyFullPath = Uri.UnescapeDataString(new UriBuilder(codeBase).Path);
string assemblyDirectory = Path.GetDirectoryName(assemblyFullPath);
// a full TeamCity build directory would be e.g. 'D:\TeamCity\buildAgent\work\de796548775cea8e\build\Compile'
return assemblyDirectory.ToLowerInvariant().Contains("buildagent\\work");
}
}
Warum brauchen Sie das? –
wusste, dass ich jemand :) Teamcity erfasst nicht von FixtureSetup Konsolausgabe fragen würde (http://youtrack.jetbrains.net/issue/TW-10588). Ich schreibe eine Problemumgehung, die Protokollmeldungen von FixtureSetup erfasst und sie beim Setup neu schreibt. Diese Problemumgehung ist nur relevant, wenn sie im TeamCity-Runner ausgeführt wird. – ripper234
Wer startet FixtureSetup? (ein VS-Projekt, TeamCity-Kommandozeile) Ich möchte versuchen, die Ausgabe in eine Datei (oder eine zusätzliche ausführbare Datei) zu leiten. –