Aracılığıyla paylaş


RunFixtureAs

TAEF, test fikstürlerini (modül, sınıf ve test düzeyi kurulum ve temizleme işlevleri) ilgili testlerden farklı bir bağlamda yürütmek için RunFixtureA'ları kullanır.

Önkoşullar

  • Yükseltilmiş olmayan bir Te.exe işleminden yükseltilmiş test fikstürlerini çalıştırmak veya test fikstürlerini Yerel Sistem olarak çalıştırmak için Te.Service'in makineye yüklenmesi ve çalıştırılması gerekir.

Genel Bakış

RunFixtureA'lar modül, sınıf ve veya test düzeyinde uygulanabilir ve test ağacından devralınır. Ağaçta belirli bir düzeyde RunFixtureAs devralmayı geri çevirme özelliğini desteklemek için RunFixtureAs:[scope] meta verileri de desteklenir.

Örneğin, bir modül RunFixtureAs=System ile işaretlenmişse, bir sınıf (ClassA) RunFixtureAs:Test=Default olarak işaretlenebilir. Böyle bir durumda modül ve sınıf fikstürleri Sistem olarak çalışır, ancak ClassA içindeki test düzeyi fikstürler Te.exe ile aynı bağlamda çalıştırılır (yine de testten farklı bir işlemde olsa da).

Test ağacında RunFixtureAs:[scope] meta veri değeri devralınmıyor; yalnızca belirtilen kapsama uygulanır.

Deterministik Garantiler

  • Varsayılan olarak (RunFixtureAs değerleri belirtilmezse), testlerin ve fikstürlerin aynı işlem içinde çalışması garanti edilir.
  • Bir fikstür 'Test' dışında geçerli bir RunFixtureAs değeriyle işaretlenmişse, fikstür testten farklı bir işlemde çalıştırılır. Bu, bir test RunAs=Elevated ve RunFixtureAs=Elevated ile işaretlenmiş olsa bile testin yükseltilmiş bir işlemde çalıştırılacağı ve armatürlerinin ayrı bir yükseltilmiş işlemde çalıştırılacağı anlamına gelir.
  • Belirli bir kapsam için eşleşen fikstür çiftleri her zaman aynı işlem içinde çalıştırılır (örneğin, bir sınıfın kurulumu ve temizleme fikstürleri aynı işlem içinde çalıştırılır).

RunFixtureAs Türleri

TAEF, test meta verileri tarafından belirtilen aşağıdaki RunFixtureAs türlerini destekler:

Sistem
TAEF, fikstür çalıştırma işlemini Yerel Sistem olarak gerçekleştirir.

Not Yerel Sistem olarak çalıştırdığınız test fikstürleri herhangi bir kullanıcı arabirimi oluşturmamalıdır. Fikstürlerinizin kullanıcı arabirimi oluşturması veya kullanıcı arabirimiyle etkileşim kurması gerekiyorsa, kullanıcı arabirimiyle ilgili kodunuzu CreateProcessAsUser kullanarak testlerinizden masaüstünde başlatılan ayrı yürütülebilir dosyalara taşımanız gerekir.

Yükseltilmiş
TAEF, gerekirse fikstürü çalıştırmak için yükseltilmiş bir işlem başlatarak fikstürün yükseltilmiş işlemde çalıştırılmasını sağlar.

Not TAEF yürüten kullanıcının RunFixtureAs=Elevated ile işaretlenmiş fikstürleri yürütmek için yöneticiler grubunun bir üyesi olması gerekir. Bunun nedeni, yönetici olmayanların yükseltecekleri bir "bölünmüş belirteç" (split token) olmamasıdır.

Varsayılan
TAEF, fikstürü Te.exe ile aynı bağlamda çalıştırır (ancak testten farklı bir işlem içindedir).

Aracı
TAEF, fikstürü bir 'Tam Simsar' sürecinde çalıştırır.

Not  

  • 'Broker' yalnızca Windows 8 ve üzeri işletim sistemlerinde desteklenir.
  • Test imzalama ilkesi sistemde etkinleştirilmelidir. Daha fazla bilgi için TESTSIGNING Önyükleme Yapılandırma Seçeneği.
  • Testleri 'RunFixtureAs=Broker' ile uzaktan çalıştırma şu anda desteklenmemektedir.
  • 'RunFixtureAs=Broker' ile yürütürken TAEF , "TE.ProcessHost.exe" yerine fikstür yürütme için "TE.ProcessHost.Broker.exe" işlemini kullanır.

UIAccess
TAEF, fikstürü UIAccess yürütme düzeyiyle tanımlanmış bir işlemde yürütür. UI otomasyonu uygulamaları için UIAccess hakkında bilgi için bkz. Windows Bütünlük Mekanizması Tasarımı.

Not  

  • UIAccess yalnızca Vista ve üzeri işletim sistemlerinde desteklenir.
  • TAEF ikili dosyalarının bilgisayardaki Program Files klasörünün altındaki bir klasörden çalışıyor olması gerekir.
  • Testleri 'RunFixtureAs=UIAccess' ile uzaktan çalıştırma şu anda desteklenmemektedir.
  • 'RunFixtureAs=UIAccess' ile yürütürken TAEF, "TE.ProcessHost.exe" yerine fikstür yürütme için "TE.ProcessHost.UIAccess.exe" işlemini kullanır.

Test
TAEF, fikstürü testle aynı işlem veya bağlamda çalıştırır.

Not RunFixtureAs ayarları belirtilmediğinde bu varsayılan TAEF davranışıdır.

DüzeniÇalıştır:[kapsam]

TAEF, test meta verileri tarafından belirtilen aşağıdaki RunFixtureAs:[scope] değerlerini destekler.

RunFixtureAs:Module, RunFixtureAs:Assembly veya RunFixtureAs:Dll
RunFixtureAs değeri yalnızca test hiyerarşisindeki Modül düzeyi düğümüne uygulanır.

RunFixtureAs:Class
RunFixtureAs değeri yalnızca test hiyerarşisindeki Sınıf düzeyi düğümlerine uygulanır.

RunFixtureAs:Method veya RunFixtureAs:Test
RunFixtureAs değeri yalnızca test hiyerarşisindeki Test düzeyi düğümlerine uygulanır.

Testleri RunFixtureAs ile İşaretleme

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);
};

Yukarıdaki örnekte testler ve fikstürler aşağıdaki gibi çalıştırılır:

  • MyTestMethod Sistem olarak çalışır
  • MyTestSetup ve MyTestCleanup Yükseltilmiş olarak çalışır
  • MyClassSetup ve MyClassCleanup Sistem olarak çalışır (MyTestMethod ile aynı işlem içinde)
  • MyModuleSetup ve MyModuleCleanup Sistem olarak çalışır (MyTestMethod ile aynı işlem içinde)
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);
};

Yukarıdaki örnekte testler ve fikstürler aşağıdaki gibi çalıştırılır:

  • MyTestMethod Sistem olarak çalışır
  • MyTestSetup ve MyTestCleanup Yükseltilmiş olarak çalışır
  • MyClassSetup ve MyClassCleanup Yükseltilmiş olarak çalışır
  • MyModuleSetup ve MyModuleCleanup Sistem olarak çalışır (MyTestMethod ile aynı işlem içinde)
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);
};

Yukarıdaki örnekte testler ve fikstürler aşağıdaki gibi çalıştırılır:

  • MyTestMethod Kısıtlı olarak çalışır
  • MyTestSetup ve MyTestCleanup Yükseltilmiş olarak çalışır
  • MyClassSetup ve MyClassCleanup Sistem olarak çalıştırılır
  • MyModuleSetup ve MyModuleCleanup Kısıtlı olarak çalışır (MyTestMethod ile aynı işlem içinde)
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);
};

Yukarıdaki örnekte testler ve fikstürler aşağıdaki gibi çalıştırılır:

  • MyTestMethod Sistem olarak çalışır
  • MyTestMethod2 Kısıtlı olarak çalışır
  • MyTestSetup ve MyTestCleanup, Yükseltilmiş modda çalışır; MyTests sınıfındaki tüm test yöntemlerine "RunFixtureAs:Test" kapsamı uygulanır.
  • MyClassSetup ve MyClassCleanup Sistem olarak çalışır (MyTestMethod'dan farklı bir işlem içinde)
  • MyModuleSetup ve MyModuleCleanup, ilgili test sürecinin bağlamında (MyTestMethod için Sistem ve MyTestMethod2 için Kısıtlı) olarak çalışır.
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);
};

Yukarıdaki örnekte testler ve fikstürler aşağıdaki gibi çalıştırılır:

  • MyTestMethod Sistem olarak çalışır
  • MyTestMethod2 Kısıtlı olarak çalışır
  • MyTestSetup ve MyTestCleanup, MyTestMethod için Sistem olarak ve MyTestMethod2 için Yükseltilmiş olarak çalışır
  • MyClassSetup ve MyClassCleanup Sistem olarak çalışır (MyTestMethod'dan farklı bir işlem içinde)
  • MyModuleSetup ve MyModuleCleanup, ilgili test süreci bağlamında (MyTestMethod için Sistem ve MyTestMethod2 için Kısıtlı) olarak çalışır.
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);
};

Yukarıdaki örnekte testler ve fikstürler aşağıdaki gibi çalıştırılır:

  • MyTestMethod Sistem olarak çalışır
  • MyTestMethod2 Kısıtlı olarak çalışır
  • MyTestSetup ve MyTestCleanup hem MyTestMethod hem de MyTestMethod2 için Yükseltilmiş olarak çalışır
  • MyClassSetup ve MyClassCleanup Varsayılan olarak çalışır (Te.exe şu anda çalışmakta olduğu bağlam içinde, ancak MyTestMethod ve MyTestMethod2'den farklı bir işlem içinde)
  • MyModuleSetup ve MyModuleCleanup Sistem olarak çalışır (MyTestMethod'dan farklı bir işlem içinde)
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);
};

Yukarıdaki örnekte testler ve fikstürler aşağıdaki gibi çalıştırılır:

  • MyTestMethod Sistem olarak çalışır
  • MyTestMethod2 Kısıtlı olarak çalışır
  • MyTestSetup ve MyTestCleanup, MyTestMethod ve MyTestMethod2 ile aynı işlem içinde çalışır
  • MyClassSetup ve MyClassCleanup Yükseltilmiş olarak çalışır
  • MyModuleSetup ve MyModuleCleanup Sistem olarak çalışır (MyTestMethod'dan farklı bir işlem içinde)
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);
};

Yukarıdaki örnekte testler ve fikstürler aşağıdaki gibi çalıştırılır:

  • MyTestMethod Sistem olarak çalışır
  • MyTestMethod2 Kısıtlı olarak çalışır
  • MyTestSetup ve MyTestCleanup, MyTestMethod ile aynı işlem içinde ve MyTestMethod2 için Yükseltilmiş bir işlemde çalışır
  • MyClassSetup ve MyClassCleanup Yükseltilmiş olarak çalışır
  • MyModuleSetup ve MyModuleCleanup Sistem olarak çalışır (MyTestMethod'dan farklı bir işlem içinde)
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);
};

Yukarıdaki örnekte testler ve fikstürler aşağıdaki gibi çalıştırılır:

  • MyTestMethod Sistem olarak çalışır
  • MyTestMethod2 Kısıtlı olarak çalışır
  • MyTestSetup ve MyTestCleanup Sistem olarak çalışır (MyTestMethod'dan farklı bir işlem içinde)
  • MyClassSetup ve MyClassCleanup Yükseltilmiş olarak çalışır
  • MyModuleSetup ve MyModuleCleanup Sistem olarak çalışır (MyTestMethod'dan farklı bir işlem içinde)