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?
cevap
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;
}
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; } –
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
. 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");
}
}
Neden buna ihtiyacınız var? –
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
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 –