2009-12-15 4 views
12

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?

+0

Warum brauchen Sie das? –

+0

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

+0

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. –

Antwort

17

Ü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; 
} 
+0

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; } –

+0

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

1

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"); 
    } 
}