Partilhar via


Modelos de Encadeamento

O TAEF fornece funcionalidade para pré-configurar um modelo de threading COM para o ambiente onde você executa o teste. Por padrão, os testes Managed © #) e Script são executados no thread STA; para Nativo, o modelo de threading não está pré-configurado.

A propriedade de metadados "ThreadingModel" é usada para solicitar um modelo de encadeamento. Os valores suportados para esta propriedade são:

Valor de Propriedade Descrição
STA Single-Threaded Apartamento (CoInitializeEx é chamado com COINIT_APARTMENTTHREADED bandeira).
MTA Apartamento Multithread (CoInitializeEx é chamado com o sinalizador COINIT_MULTITHREADED).
Nenhum O modelo de encadeamento não está especificado.

Configurando um modelo de encadeamento

Exemplo: Para solicitar o modelo de threading MTA na anotação C++:

class ThreadModelTests
{

    TEST_CLASS(ThreadModelTests);

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

Você também pode solicitar a propriedade do modelo de execução paralela para uma classe ou um módulo. Por exemplo

class ThreadModelTestsWithMTADefault
{

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

    TEST_METHOD(DefaultWithMTASetByClass);
};

Da mesma forma, você também pode solicitar o modelo de threading para testes gerenciados:

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

Observe no último teste acima: SetsOfMetadataTest, também é possível fazer uso de conjuntos de metadados e executar o mesmo teste: primeiro com o modelo de threading STA e depois com MTA.