2009-12-15 4 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

이것은 Eugene의 아이디어에 기반한 코드입니다 : private static bool IsOnTeamCity() { string environmentVariableValue = Environment.GetEnvironmentVariable ("TEAMCITY_VERSION"); if (! string.IsNullOrEmpty (environmentVariableValue)) { return true; } false를 반환합니다. } –

+0

그래서이 일을해야 간단 (?) : '반환 string.IsNullOrEmpty (Environment.GetEnvironmentVariable ("TEAMCITY_VERSION을"))' 은 왜 그냥'참/false'anyway를 반환 if''여분의 추가를!? – 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"); 
    } 
} 
관련 문제