Condividi tramite


Modelli di threading

TAEF offre funzionalità per la preconfigurazione di un modello di threading COM per l'ambiente in cui viene eseguito il test. Per impostazione predefinita, i test gestiti © #) e script vengono eseguiti nel thread STA; per Native, il modello di threading non è preconfigurato.

La proprietà di metadati "ThreadingModel" viene utilizzata per richiedere un modello di threading. I valori supportati per questa proprietà sono:

Valore della proprietà Descrizione
STA Single-Threaded Apartment (CoInitializeEx viene chiamato con COINIT_APARTMENTTHREADED flag).
MTA Apartment multithreading (CoInitializeEx viene chiamato con COINIT_MULTITHREADED flag).
Nessuno Il modello di threading non è specificato.

Configurazione di un modello di threading

Esempio: per richiedere il modello di threading MTA da C++ mark-up:

class ThreadModelTests
{

    TEST_CLASS(ThreadModelTests);

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

È anche possibile richiedere la proprietà del modello di threading per una classe o un modulo. Ad esempio,

class ThreadModelTestsWithMTADefault
{

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

    TEST_METHOD(DefaultWithMTASetByClass);
};

Analogamente, è anche possibile richiedere il modello di threading per i test gestiti:

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

Si noti nell'ultimo test precedente: SetsOfMetadataTest, è anche possibile usare set di metadati ed eseguire lo stesso test: prima con il modello di threading STA e quindi con MTA.