2009-12-15 11 views
12

Sadece TeamCity test başlatıcısından geçiyorsam bazı kodları çalıştırmam gerekiyor. Bunu tespit etmenin en kolay yolu nedir?Bir NUnit testinin TeamCity içinden çalışıp çalışmadığını nasıl tespit edebilirim?

+0

Neden buna ihtiyacınız var? –

+0

Birinin sormasını biliyordum :) TeamCity, FixtureSetup'ın konsol çıkışını yakalamıyor (http://youtrack.jetbrains.net/issue/TW-10588). Bu yüzden, FixtureSetup'tan günlük mesajları yakalayacak ve bunları Kur'da yeniden yazacak bir geçici yazı yazıyorum. Bu geçici çözüm, yalnızca TeamCity koşucusu içinde çalışırken geçerlidir. – ripper234

+0

FixtureSetup'ı kim başlatır? (bir VS projesi, TeamCity komut satırı) Fikrim, çıktıyı bir dosyaya (veya ek yürütülebilir dosyaya) iletmeyi denemektir. TeamCity ile birlikte gelen –

cevap

17

TEAMCITY_VERSION ortam değişkeninin tanımlanmış olup olmadığını kontrol edin.

Başka bir yaklaşım, NUnit kategorilerini kullanmaktır. Test TeamCity tarafından çalıştırılıyor ise bu kod aşağıda yorum dayanarak

kontrol etmek mümkün olmalıdır: Ben temelde aşağıdaki özelliği ile bu yapıyorum

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

bu, Eugene'nin fikrine dayanan çalışma kodudur: özel statik boole IsOnTeamCity() { dize ortamıVariableValue = Environment.GetEnvironmentVariable ("TEAMCITY_VERSION"); if (! String.IsNullOrEmpty (environmentVariableValue)) { true; } false; } –

+0

Yani bu çalışması gerekir basitleştirilmiş (?): 'return string.IsNullOrEmpty (Environment.GetEnvironmentVariable ("TEAMCITY_VERSION"))' Neden sadece 'gerçek/false'anyway döndürür if'' ekstra ekleyin!? – NiKiZe

1

. Bu, çağrı derleme kod tabanı aracılığıyla dizin adını alır ve TeamCity derleme dizininizin bölümlerini içeriyorsa, TeamCity içinde çalışır.

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