2011-07-05 3 views
4

파일에서 예상되는 결과를 읽는 데 필요한 많은 통합 테스트가 있습니다. 내 테스트는 상대 경로로 파일에 액세스합니다. 상대 경로는 x86 대 다른 CPU의 깊이의 한 수준입니다. 예를 들어 내 테스트가 x86에서 실행되면 "../../TestResults/MyTest.csv"파일을 읽어야하지만 모든 CPU에서 "../TestResults/MyTest.csv"에 액세스해야합니다.x86 또는 모든 CPU 용으로 컴파일 된 경우 런타임에 내 코드를 감지 할 수 있습니까

은 지금까지 나는 모든 테스트 픽스처에 다음 일정이 있습니다

private const string platformDependentPrefix = ""; 

내가 86 내 테스트를 실행하면, 내가 수동으로 "를"../ "모든 테스트 픽스처에서"변경해야합니다.

자동화 할 수있는 방법이 있습니까?

답변

5

매우 해키 방법하지만 작품 :

public static string Platform 
{ 
    get 
    { 
     if (IntPtr.Size == 8) 
      return "x64"; 
     else 
      return "x86"; 
    } 
} 

은 또한 당신이 CSharpProjectConfigurationProperties3.PlatformTarget 속성에 액세스 할 수 있습니다.

+0

이것은 효과가 있습니다! –

+0

반갑습니다. –

3

IntPtr.Size를 사용하면 현재 프로세스가 실행되는 '비트'를 감지 할 수 있습니다. 4 바이트 (32 비트) 또는 8 바이트 (64 비트)를 얻습니다. 은 임의의 CPU로으로 실행되지만, 컴파일시 결정을 내릴 수 있도록 해당 구성에 #define을 지정할 수 있습니다.

3

X86에서 빌드 할 때 프로젝트에 조건부 컴파일 기호 (프로젝트 -> 속성 -> 빌드)를 추가하고 이것을 사용하여 경로를 결정할 수 있습니다.

ex.

#if X86 
    path = "x86 path"; 
#endif 

이 외에도이 경로를 사용하는 모든 테스트가 상속하는 기본 테스트 클래스를 만들 수 있습니다. 이 기본 클래스에서 컴파일 기호를 사용합니다. 이렇게하면 경로를 한 번만 정의하면됩니다.

4

프로세스가 64 비트로 실행되는지 여부 또는 컴파일 대상이 필요합니까?

프로세스 비트를 원할 경우 Teoman (또는 .NET 4를 사용하는 경우 Environment.Is64BitProcess)에서 언급 한 IntPtr.Size 메서드를 사용할 수 있습니다.

대상 플랫폼을 원할 경우 System.Reflection 네임 스페이스에 Module.GetPEKind이 표시됩니다. PortableExecutableKinds out 매개 변수는 Required32Bit 플래그, 플래그 없음, PE32Plus 플래그 세트가있는 x86, AnyCPU 또는 x64 대상인지 여부에 따라 다른 값을 갖습니다.

관련 문제