RunFixtureAs

TAEF는 RunFixtureAs를 사용하여 해당 테스트 이외의 컨텍스트에서 테스트 픽스쳐(모듈, 클래스 및 테스트 수준 설정 및 정리 함수)를 실행합니다.

필수 구성 요소

  • 관리자 권한 없는 Te.exe 프로세스에서 상승된 테스트 픽스쳐를 실행하거나 로컬 시스템으로 테스트 픽스쳐를 실행하려면 컴퓨터에 Te.Service를 설치하고 실행해야 합니다.

개요

RunFixtureAs는 모듈, 클래스 및 테스트 수준에서 적용할 수 있으며 테스트 트리에서 상속됩니다. 트리의 지정된 수준에서 RunFixtureAs 상속을 옵트아웃하는 기능을 지원하기 위해 RunFixtureAs:[scope] 메타데이터도 지원됩니다.

예를 들어 모듈이 RunFixtureAs=System으로 표시된 경우 클래스(ClassA)를 RunFixtureAs:Test=Default로 표시할 수 있습니다. 이러한 경우 모듈 및 클래스 픽스쳐는 System으로 실행되지만 ClassA 내의 테스트 수준 비품은 Te.exe 동일한 컨텍스트에서 실행됩니다(테스트와 다른 프로세스는 여전히 있음).

RunFixtureAs:[scope] 메타데이터 값은 테스트 트리에서 상속되지 않으며 지정된 scope만 적용됩니다.

결정적 보장

  • 기본적으로(RunFixtureAs 값이 지정되지 않은 경우) 테스트 및 픽스쳐가 동일한 프로세스 내에서 실행되도록 보장됩니다.
  • 픽스쳐가 'Test' 이외의 유효한 RunFixtureAs 값으로 표시되면 픽스쳐는 테스트와 다른 프로세스로 실행됩니다. 즉, 테스트가 RunAs=Elevated 및 RunFixtureAs=Elevated로 표시된 경우에도 테스트는 관리자 권한 프로세스에서 실행되고 해당 비품은 별도의 관리자 권한 프로세스에서 실행됩니다.
  • 지정된 scope 일치하는 픽스쳐 쌍은 항상 동일한 프로세스 내에서 실행됩니다(예: 클래스의 설정 및 정리 비품은 동일한 프로세스 내에서 실행됨).

RunFixtureAs 형식

TAEF는 테스트 메타데이터로 지정된 다음 RunFixtureAs 형식을 지원합니다.

시스템
TAEF는 픽스처를 로컬 시스템으로 실행합니다.

참고 로컬 시스템으로 실행하는 테스트 픽스쳐는 UI를 만들 수 없습니다. 비품이 UI를 만들거나 상호 작용해야 하는 경우 CreateProcessAsUser를 사용하여 테스트에서 데스크톱에서 시작되는 별도의 실행 파일로 UI 관련 코드를 이동해야 합니다.

높은
TAEF는 필요한 경우 픽스쳐를 실행할 상승된 프로세스를 생성하여 상승된 프로세스에서 픽스쳐가 실행되도록 합니다.

참고 RunFixtureAs=Elevated로 표시된 픽스쳐를 실행하려면 TAEF를 실행하는 사용자가 관리자 그룹의 구성원이어야 합니다. 관리자가 아닌 사용자에게 승격할 분할 토큰이 없기 때문입니다.

기본
TAEF는 Te.exe 같은 컨텍스트에서 픽스처를 실행합니다(테스트와 다른 프로세스 내에 있음).

브로커
TAEF는 '몰입형 브로커' 프로세스에서 픽스처를 실행합니다.

참고  

  • 'Broker'는 Windows 8 이상의 운영 체제에서만 지원됩니다.
  • 시스템에서 테스트 서명 정책을 사용하도록 설정해야 합니다. 자세한 내용은 TESTSIGNING 부팅 구성 옵션입니다.
  • 'RunFixtureAs=Broker'를 사용하여 원격으로 테스트를 실행하는 것은 현재 지원되지 않습니다.
  • 'RunFixtureAs=Broker'로 실행하는 경우 TAEF는 "TE.ProcessHost.exe"이 아닌 "TE.ProcessHost.Broker.exe" 프로세스를 픽스쳐 실행에 사용합니다.

Uiaccess
TAEF는 UIAccess 실행 수준으로 표시된 프로세스에서 픽스처를 실행합니다. UI 자동화 애플리케이션에 대한 UIAccess에 대한 자세한 내용은 Windows 무결성 메커니즘 디자인을 참조하세요.

참고  

  • UIAccess는 Vista 이상 운영 체제에서만 지원됩니다.
  • TAEF 이진 파일은 컴퓨터의 Program Files 폴더 아래의 폴더에서 실행되어야 합니다.
  • 'RunFixtureAs=UIAccess'를 사용하여 원격으로 테스트를 실행하는 것은 현재 지원되지 않습니다.
  • 'RunFixtureAs=UIAccess'로 실행하는 경우 TAEF는 "TE.ProcessHost.exe"이 아닌 픽스쳐 실행에 "TE.ProcessHost.UIAccess.exe" 프로세스를 사용합니다.

테스트
TAEF는 테스트와 동일한 프로세스 또는 컨텍스트에서 픽스처를 실행합니다.

참고 RunFixtureAs 설정이 지정되지 않은 경우 기본 TAEF 동작입니다.

RunFixtureAs:[scope]

TAEF는 테스트 메타데이터로 지정된 다음 RunFixtureAs:[scope] 값을 지원합니다.

RunFixtureAs:Module, RunFixtureAs:Assembly 또는 RunFixtureAs:Dll
RunFixtureAs 값은 테스트 계층 구조의 모듈 수준 노드에만 적용됩니다.

RunFixtureAs:Class
RunFixtureAs 값은 테스트 계층의 클래스 수준 노드에만 적용됩니다.

RunFixtureAs:Method 또는 RunFixtureAs:Test
RunFixtureAs 값은 테스트 계층의 테스트 수준 노드에만 적용됩니다.

RunFixtureAs를 사용하여 테스트 표시

MODULE_SETUP(MyModuleSetup);
MODULE_CLEANUP(MyModuleCleanup);

class MyTests
{
    TEST_CLASS(MyTests);

    BEGIN_TEST_METHOD(MyTestMethod)
        TEST_METHOD_PROPERTY(L"RunAs", L"System")
        TEST_METHOD_PROPERTY(L"RunFixtureAs", L"Elevated")
    END_TEST_METHOD()

    TEST_METHOD_SETUP(MyTestSetup);
    TEST_METHOD_CLEANUP(MyTestCleanup);

    TEST_CLASS_SETUP(MyClassSetup);
    TEST_CLASS_CLEANUP(MyClassCleanup);
};

앞의 예제에서는 다음과 같이 테스트 및 픽스쳐를 실행합니다.

  • MyTestMethod가 System으로 실행됨
  • MyTestSetup 및 MyTestCleanup은 Elevated로 실행됩니다.
  • MyClassSetup 및 MyClassCleanup은 System으로 실행됩니다(MyTestMethod와 동일한 프로세스 내).
  • MyModuleSetup 및 MyModuleCleanup은 System으로 실행됩니다(MyTestMethod와 동일한 프로세스 내).
MODULE_SETUP(MyModuleSetup);
MODULE_CLEANUP(MyModuleCleanup);

class MyTests
{
    BEGIN_TEST_CLASS(MyTests)
        TEST_CLASS_PROPERTY(L"RunFixtureAs", L"Elevated")
    END_TEST_CLASS()

    BEGIN_TEST_METHOD(MyTestMethod)
        TEST_METHOD_PROPERTY(L"RunAs", L"System")
    END_TEST_METHOD()

    TEST_METHOD_SETUP(MyTestSetup);
    TEST_METHOD_CLEANUP(MyTestCleanup);

    TEST_CLASS_SETUP(MyClassSetup);
    TEST_CLASS_CLEANUP(MyClassCleanup);
};

앞의 예제에서는 다음과 같이 테스트 및 픽스쳐를 실행합니다.

  • MyTestMethod가 System으로 실행됨
  • MyTestSetup 및 MyTestCleanup은 Elevated로 실행됩니다.
  • MyClassSetup 및 MyClassCleanup은 관리자 권한으로 실행됩니다.
  • MyModuleSetup 및 MyModuleCleanup은 System으로 실행됩니다(MyTestMethod와 동일한 프로세스 내).
MODULE_SETUP(MyModuleSetup);
MODULE_CLEANUP(MyModuleCleanup);

class MyTests
{
    BEGIN_TEST_CLASS(MyTests)
        TEST_CLASS_PROPERTY(L"RunFixtureAs", L"System")
    END_TEST_CLASS()

    BEGIN_TEST_METHOD(MyTestMethod)
        TEST_METHOD_PROPERTY(L"RunAs", L"Restricted")
        TEST_METHOD_PROPERTY(L"RunFixtureAs", L"Elevated")
    END_TEST_METHOD()

    TEST_METHOD_SETUP(MyTestSetup);
    TEST_METHOD_CLEANUP(MyTestCleanup);

    TEST_CLASS_SETUP(MyClassSetup);
    TEST_CLASS_CLEANUP(MyClassCleanup);
};

앞의 예제에서는 다음과 같이 테스트 및 픽스쳐를 실행합니다.

  • MyTestMethod는 제한된 것으로 실행됩니다.
  • MyTestSetup 및 MyTestCleanup은 Elevated로 실행됩니다.
  • MyClassSetup 및 MyClassCleanup이 System으로 실행됨
  • MyModuleSetup 및 MyModuleCleanup은 제한된 것으로 실행됩니다(MyTestMethod와 동일한 프로세스 내에서).
MODULE_SETUP(MyModuleSetup);
MODULE_CLEANUP(MyModuleCleanup);

class MyTests
{
    BEGIN_TEST_CLASS(MyTests)
        TEST_CLASS_PROPERTY(L"RunFixtureAs", L"System")
        TEST_METHOD_PROPERTY(L"RunFixtureAs:Test", L"Elevated")
    END_TEST_CLASS()

    BEGIN_TEST_METHOD(MyTestMethod)
        TEST_METHOD_PROPERTY(L"RunAs", L"System")
    END_TEST_METHOD()

    BEGIN_TEST_METHOD(MyTestMethod2)
        TEST_METHOD_PROPERTY(L"RunAs", L"Restricted")
    END_TEST_METHOD()

    TEST_METHOD_SETUP(MyTestSetup);
    TEST_METHOD_CLEANUP(MyTestCleanup);

    TEST_CLASS_SETUP(MyClassSetup);
    TEST_CLASS_CLEANUP(MyClassCleanup);
};

앞의 예제에서는 다음과 같이 테스트 및 픽스쳐를 실행합니다.

  • MyTestMethod가 System으로 실행됨
  • MyTestMethod2는 제한된 것으로 실행됩니다.
  • MyTestSetup 및 MyTestCleanup은 Elevated로 실행됩니다. MyTests 클래스 내의 모든 테스트 메서드에 적용되는 RunFixtureAs:Test 범위 지정
  • MyClassSetup 및 MyClassCleanup은 System으로 실행됩니다(MyTestMethod와 다른 프로세스 내).
  • MyModuleSetup 및 MyModuleCleanup은 해당 테스트 프로세스의 컨텍스트 내에서 실행됩니다(MyTestMethod용 시스템 및 MyTestMethod2의 경우 제한됨).
MODULE_SETUP(MyModuleSetup);
MODULE_CLEANUP(MyModuleCleanup);

class MyTests
{
    BEGIN_TEST_CLASS(MyTests)
        TEST_CLASS_PROPERTY(L"RunFixtureAs", L"System")
    END_TEST_CLASS()

    BEGIN_TEST_METHOD(MyTestMethod)
        TEST_METHOD_PROPERTY(L"RunAs", L"System")
    END_TEST_METHOD()

    BEGIN_TEST_METHOD(MyTestMethod2)
        TEST_METHOD_PROPERTY(L"RunAs", L"Restricted")
        TEST_METHOD_PROPERTY(L"RunFixtureAs", L"Elevated")
    END_TEST_METHOD()

    TEST_METHOD_SETUP(MyTestSetup);
    TEST_METHOD_CLEANUP(MyTestCleanup);

    TEST_CLASS_SETUP(MyClassSetup);
    TEST_CLASS_CLEANUP(MyClassCleanup);
};

앞의 예제에서는 다음과 같이 테스트 및 픽스쳐를 실행합니다.

  • MyTestMethod가 System으로 실행됨
  • MyTestMethod2는 제한된 것으로 실행됩니다.
  • MyTestSetup 및 MyTestCleanup은 MyTestMethod용 시스템 및 MyTestMethod2에 대해 Elevated로 실행됩니다.
  • MyClassSetup 및 MyClassCleanup은 System으로 실행됩니다(MyTestMethod와 다른 프로세스 내).
  • MyModuleSetup 및 MyModuleCleanup은 해당 테스트 프로세스의 컨텍스트 내에서 실행됩니다(MyTestMethod용 시스템 및 MyTestMethod2의 경우 제한됨).
BEGIN_MODULE()
    MODULE_PROPERTY(L"RunFixtureAs", L"System")
END_MODULE()

MODULE_SETUP(MyModuleSetup);
MODULE_CLEANUP(MyModuleCleanup);

class MyTests
{
    BEGIN_TEST_CLASS(MyTests)
        TEST_CLASS_PROPERTY(L"RunFixtureAs", L"Default")
        TEST_CLASS_PROPERTY(L"RunFixtureAs:Test", L"Elevated")
    END_TEST_CLASS()

    BEGIN_TEST_METHOD(MyTestMethod)
        TEST_METHOD_PROPERTY(L"RunAs", L"System")
    END_TEST_METHOD()

    BEGIN_TEST_METHOD(MyTestMethod2)
        TEST_METHOD_PROPERTY(L"RunAs", L"Restricted")
    END_TEST_METHOD()

    TEST_METHOD_SETUP(MyTestSetup);
    TEST_METHOD_CLEANUP(MyTestCleanup);

    TEST_CLASS_SETUP(MyClassSetup);
    TEST_CLASS_CLEANUP(MyClassCleanup);
};

앞의 예제에서는 다음과 같이 테스트 및 픽스쳐를 실행합니다.

  • MyTestMethod가 System으로 실행됨
  • MyTestMethod2는 제한된 것으로 실행됩니다.
  • MyTestSetup 및 MyTestCleanup은 MyTestMethod 및 MyTestMethod2 모두에 대해 Elevated로 실행됩니다.
  • MyClassSetup 및 MyClassCleanup은 기본값으로 실행됩니다(현재 실행 중인 Te.exe 동일한 컨텍스트 내에서 MyTestMethod 및 MyTestMethod2와 다른 프로세스 내에 있음)
  • MyModuleSetup 및 MyModuleCleanup은 System으로 실행됩니다(MyTestMethod와 다른 프로세스 내).
BEGIN_MODULE()
    MODULE_PROPERTY(L"RunFixtureAs", L"System")
    MODULE_PROPERTY(L"RunFixtureAs:Test", L"Test")
END_MODULE()

MODULE_SETUP(MyModuleSetup);
MODULE_CLEANUP(MyModuleCleanup);

class MyTests
{
    BEGIN_TEST_CLASS(MyTests)
        TEST_CLASS_PROPERTY(L"RunFixtureAs", L"Elevated")
    END_TEST_CLASS()

    BEGIN_TEST_METHOD(MyTestMethod)
        TEST_METHOD_PROPERTY(L"RunAs", L"System")
    END_TEST_METHOD()

    BEGIN_TEST_METHOD(MyTestMethod2)
        TEST_METHOD_PROPERTY(L"RunAs", L"Restricted")
    END_TEST_METHOD()

    TEST_METHOD_SETUP(MyTestSetup);
    TEST_METHOD_CLEANUP(MyTestCleanup);

    TEST_CLASS_SETUP(MyClassSetup);
    TEST_CLASS_CLEANUP(MyClassCleanup);
};

앞의 예제에서는 다음과 같이 테스트 및 픽스쳐를 실행합니다.

  • MyTestMethod가 System으로 실행됨
  • MyTestMethod2는 제한된 것으로 실행됩니다.
  • MyTestSetup 및 MyTestCleanup은 MyTestMethod 및 MyTestMethod2와 동일한 프로세스 내에서 실행됩니다.
  • MyClassSetup 및 MyClassCleanup은 관리자 권한으로 실행됩니다.
  • MyModuleSetup 및 MyModuleCleanup은 System으로 실행됩니다(MyTestMethod와 다른 프로세스 내).
BEGIN_MODULE()
    MODULE_PROPERTY(L"RunFixtureAs", L"System")
    MODULE_PROPERTY(L"RunFixtureAs:Test", L"Test")
END_MODULE()

MODULE_SETUP(MyModuleSetup);
MODULE_CLEANUP(MyModuleCleanup);

class MyTests
{
    BEGIN_TEST_CLASS(MyTests)
        TEST_CLASS_PROPERTY(L"RunFixtureAs", L"Elevated")
    END_TEST_CLASS()

    BEGIN_TEST_METHOD(MyTestMethod)
        TEST_METHOD_PROPERTY(L"RunAs", L"System")
    END_TEST_METHOD()

    BEGIN_TEST_METHOD(MyTestMethod2)
        TEST_METHOD_PROPERTY(L"RunAs", L"Restricted")
        TEST_METHOD_PROPERTY(L"RunFixtureAs", L"Elevated")
    END_TEST_METHOD()

    TEST_METHOD_SETUP(MyTestSetup);
    TEST_METHOD_CLEANUP(MyTestCleanup);

    TEST_CLASS_SETUP(MyClassSetup);
    TEST_CLASS_CLEANUP(MyClassCleanup);
};

앞의 예제에서는 다음과 같이 테스트 및 픽스쳐를 실행합니다.

  • MyTestMethod가 System으로 실행됨
  • MyTestMethod2는 제한된 것으로 실행됩니다.
  • MyTestSetup 및 MyTestCleanup은 MyTestMethod와 동일한 프로세스 내에서 실행되고 MyTestMethod2의 Elevated 프로세스에서 실행됩니다.
  • MyClassSetup 및 MyClassCleanup은 Elevated로 실행됩니다.
  • MyModuleSetup 및 MyModuleCleanup은 System으로 실행됩니다(MyTestMethod와 다른 프로세스 내).
BEGIN_MODULE()
    MODULE_PROPERTY(L"RunFixtureAs", L"System")
END_MODULE()

MODULE_SETUP(MyModuleSetup);
MODULE_CLEANUP(MyModuleCleanup);

class MyTests
{
    BEGIN_TEST_CLASS(MyTests)
        TEST_CLASS_PROPERTY(L"RunFixtureAs:Class", L"Elevated")
    END_TEST_CLASS()

    BEGIN_TEST_METHOD(MyTestMethod)
        TEST_METHOD_PROPERTY(L"RunAs", L"System")
    END_TEST_METHOD()

    BEGIN_TEST_METHOD(MyTestMethod2)
        TEST_METHOD_PROPERTY(L"RunAs", L"Restricted")
    END_TEST_METHOD()

    TEST_METHOD_SETUP(MyTestSetup);
    TEST_METHOD_CLEANUP(MyTestCleanup);

    TEST_CLASS_SETUP(MyClassSetup);
    TEST_CLASS_CLEANUP(MyClassCleanup);
};

위의 예제에서는 다음과 같이 테스트 및 픽스쳐를 실행합니다.

  • MyTestMethod가 System으로 실행됨
  • MyTestMethod2는 제한된 것으로 실행됩니다.
  • MyTestSetup 및 MyTestCleanup은 System으로 실행됩니다(MyTestMethod와 다른 프로세스 내).
  • MyClassSetup 및 MyClassCleanup은 Elevated로 실행됩니다.
  • MyModuleSetup 및 MyModuleCleanup은 System으로 실행됩니다(MyTestMethod와 다른 프로세스 내).