2009-12-15 3 views
12

Мне нужно запустить некоторый код только в том случае, если я запускаюсь из тестовой пусковой установки TeamCity. Какой самый простой способ обнаружить это?Как определить, выполняется ли в TeamCity тест NUnit?

+0

Зачем вам это нужно? –

+0

Я знал, что кто-то спросит :) TeamCity не захватывает вывод консоли из FixtureSetup (http://youtrack.jetbrains.net/issue/TW-10588). Итак, я пишу обходное решение, которое будет записывать сообщения журнала из FixtureSetup и переписывать их в программе установки. Это обходное решение имеет смысл только при работе внутри бегуна TeamCity. – ripper234

+0

Кто начинает FixtureSetup? (проект VS, командная строка TeamCity). Моя идея - попытаться перенаправить вывод в файл (или дополнительный исполняемый файл). –

ответ

17

Проверьте, не определена ли переменная среды TEAMCITY_VERSION.

Другим подходом является использование категорий NUnit.

на основе комментариев ниже этого кода должен быть в состоянии проверить, если тест руководят TeamCity:

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

Это рабочий код, основанный на идее Евгения: private static bool IsOnTeamCity() { string environmentVariableValue = Environment.GetEnvironmentVariable ("TEAMCITY_VERSION"); if (! String.IsNullOrEmpty (окружениеVariableValue)) { return true; } return false; } –

+0

Так упрощена это должно работать (?): 'вернуть string.IsNullOrEmpty (Environment.GetEnvironmentVariable ("TEAMCITY_VERSION"))' Зачем добавлять дополнительные 'if', что просто возвращает' истина/false'anyway!? – NiKiZe

1

Я в основном делаю, что со следующим свойством. Он получает имя каталога через базу кода вызывающей сборки, и если он содержит части вашего агента сборки TeamCity, он работает в 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"); 
    } 
} 
Смежные вопросы