Поделиться через


Потоковые модели

TAEF предоставляет функциональные возможности для предварительной настройки модели потоков COM для среды, в которой выполняется тестирование. По умолчанию управляемые © #) и скрипты выполняются в потоке STA; Для машинного кода потоковая модель не настроена предварительно.

Свойство метаданных ThreadingModel используется для запроса модели потоков. Для этого свойства поддерживаются следующие значения:

Значение свойства Описание
STA Single-Threaded Apartment (CoInitializeEx вызывается с флагом COINIT_APARTMENTTHREADED).
MTA Многопоточная квартира (CoInitializeEx вызывается с флагом COINIT_MULTITHREADED).
Нет Потоковая модель не указана.

Настройка потоковой модели

Пример. Чтобы запросить потоковую модель MTA из разметки C++, выполните приведенные ниже действия.

class ThreadModelTests
{

    TEST_CLASS(ThreadModelTests);

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

Вы также можете запросить свойство модели потоков для класса или модуля. Например,

class ThreadModelTestsWithMTADefault
{

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

    TEST_METHOD(DefaultWithMTASetByClass);
};

Аналогичным образом можно также запросить модель потоков для управляемых тестов:

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

Обратите внимание, что в последнем тесте выше: SetsOfMetadataTest также можно использовать наборы метаданных и выполнить тот же тест: сначала с моделью потоков STA, а затем с MTA.