2009-12-15 9 views
12

Je dois exécuter du code uniquement si je cours depuis le lanceur de test TeamCity. Quel est le moyen le plus simple de détecter cela?Comment puis-je détecter si un test NUnit s'exécute à partir de TeamCity?

+0

Pourquoi avez-vous besoin de cela? –

+0

Je savais que quelqu'un demanderait :) TeamCity ne capture pas la sortie console de FixtureSetup (http://youtrack.jetbrains.net/issue/TW-10588). Donc, j'écris une solution de contournement qui va capturer les messages du journal de FixtureSetup et les réécrire sur le programme d'installation. Cette solution de contournement est uniquement pertinente lors de l'exécution à l'intérieur du coureur TeamCity. – ripper234

+0

Qui lance FixtureSetup? (un projet VS, ligne de commande TeamCity) Mon idée est d'essayer de transférer la sortie vers un fichier (ou un exécutable supplémentaire). –

Répondre

17

Vérifiez si la variable d'environnement TEAMCITY_VERSION est définie.

Une autre approche consiste à utiliser des catégories NUnit.

Basé sur le commentaire ci-dessous ce code devrait être en mesure de vérifier si le test est en cours d'exécution par TeamCity:

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

c'est le code de travail basé sur l'idée d'Eugene: private static bool IsOnTeamCity() { chaîne environmentVariableValue = Environment.GetEnvironmentVariable ("TEAMCITY_VERSION"); if (! String.IsNullOrEmpty (valeurVariable d'environnement)) { return true; } return false; } –

+0

donc simplifié cela devrait fonctionner (?): ' retour String.IsNullOrEmpty (Environment.GetEnvironmentVariable ("de TEAMCITY_VERSION"))' Pourquoi ajouter extra 'if' qui vient retourne' vrai/false'anyway! – NiKiZe

1

Je fais essentiellement que la propriété suivante. Il obtient le nom du répertoire via la base de code de l'assembly appelant et s'il contient des parties de votre répertoire d'agent de construction TeamCity, il s'exécute dans 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"); 
    } 
}