2009-12-15 14 views
12

Ho bisogno di eseguire del codice solo se sto correndo dall'interno del launcher di test di TeamCity. Qual è il modo più semplice per rilevare questo?Come posso rilevare se un test NUnit è in esecuzione da all'interno di TeamCity?

+0

Perché è necessario? –

+0

Sapevo che qualcuno avrebbe chiesto :) TeamCity non cattura l'output della console da FixtureSetup (http://youtrack.jetbrains.net/issue/TW-10588). Quindi, sto scrivendo una soluzione che catturerà i messaggi di log da FixtureSetup e li riscriverà durante l'installazione. Questa soluzione è rilevante solo quando si esegue all'interno del corridore di TeamCity. – ripper234

+0

Chi avvia FixtureSetup? (un progetto VS, riga di comando di TeamCity) La mia idea è di provare a inoltrare l'output a un file (o eseguibile aggiuntivo). –

risposta

17

Verificare se la variabile di ambiente TEAMCITY_VERSION è definita.

Un altro approccio consiste nell'utilizzare le categorie NUnit.

Sulla base del commento di sotto di questo codice dovrebbe essere in grado di verificare se il test è gestito da TeamCity:

private static bool IsOnTeamCity() 
{ 
    string environmentVariableValue = Environment.GetEnvironmentVariable("TEAMCITY_VERSION"); 
    if (!string.IsNullOrEmpty(environmentVariableValue)) 
    { 
     return true; 
    } 
    return false; 
} 
+0

questo è un codice funzionante basato sull'idea di Eugene: private static bool IsOnTeamCity() { string environmentVariableValue = Environment.GetEnvironmentVariable ("TEAMCITY_VERSION"); if (! String.IsNullOrEmpty (environmentVariableValue)) { return true; } return false; } –

+0

Quindi semplificato questo dovrebbe funzionare (?): 'tornare string.IsNullOrEmpty (Environment.GetEnvironmentVariable ("TEAMCITY_VERSION"))' Perché aggiungere l'extra 'if' che proprio restituisce' vero/false'anyway!? – NiKiZe

1

praticamente sto facendo che con la seguente proprietà. Ottiene il nome della directory tramite la base di codice dell'assembly chiamante e se contiene parti della directory dell'agente di generazione di TeamCity in esecuzione in TeamCity.

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