Udostępnij przez


Modele wątkowe

TaEF udostępnia funkcje wstępnego konfigurowania modelu wątkowości COM dla środowiska, w którym jest wykonywany test. Domyślnie testy zarządzane © #) i Skrypt są uruchamiane w wątku STA; w przypadku modelu natywnego wątek nie jest wstępnie skonfigurowany.

Właściwość metadanych "ThreadingModel" służy do żądania modelu wątkowego. Obsługiwane wartości dla tej właściwości to:

Wartość właściwości Opis
STA Single-Threaded Apartment (CoInitializeEx jest wywoływana z flagą COINIT_APARTMENTTHREADED).
MTA Mieszkanie wielowątkowe (CoInitializeEx jest wywoływany z flagą COINIT_MULTITHREADED).
Żaden Nie określono modelu wątkowego.

Konfigurowanie modelu wątkowego

Przykład: aby zażądać modelu wątkowego MTA z poziomu znaczników języka C++:

class ThreadModelTests
{

    TEST_CLASS(ThreadModelTests);

    BEGIN_TEST_METHOD(MTAThreadingModelTest)
        TEST_METHOD_PROPERTY(L"ThreadingModel", L"STA")
    END_TEST_METHOD()
};

Możesz również zażądać właściwości modelu wątkowego dla klasy lub modułu. Na przykład

class ThreadModelTestsWithMTADefault
{

    BEGIN_TEST_CLASS(ThreadModelTestsWithMTADefault)
        TEST_CLASS_PROPERTY(L"ThreadingModel", L"Mta")
    END_TEST_CLASS()

    TEST_METHOD(DefaultWithMTASetByClass);
};

Podobnie można również zażądać modelu wątkowego dla testów zarządzanych.

[TestClass]

public class SimpleTests
{
    [TestMethod]
    [TestProperty("ThreadingModel", "MTA")]
    public void Test1()
    {
        Verify.IsTrue(true);
    }

    [TestMethod]
    [TestProperty("ThreadingModel", "STA")]
    public void Test2()
    {
        Verify.IsTrue(true);
    }

    [TestMethod]
    [TestProperty("ThreadingModel", "{STA; MTA}")]
    public void SetsOfMetadataTest()
    {
        Log.Comment("In CSharpThreadingModelExample.SetsOfMetadataTest");
        DisplayAppartmentState();
    }
}

Zwróć uwagę na ostatni test powyżej: SetsOfMetadataTest. Możliwe jest także użycie zestawów metadanych i uruchomienie tego samego testu: najpierw z modelem wątkowania STA, a następnie MTA.