Partager via


Modèles de thread

TAEF fournit des fonctionnalités permettant de préconfigurer un modèle de thread COM pour l’environnement dans lequel vous testez l’exécution. Par défaut, les tests Managed © #) et Script s’exécutent sur le thread STA ; pour native, le modèle de thread n’est pas préconfiguré.

La propriété de métadonnées « ThreadingModel » est utilisée pour demander un modèle de threading. Les valeurs prises en charge pour cette propriété sont les suivantes :

Valeur de propriété Description
STA Single-Threaded Apartment (CoInitializeEx est appelé avec COINIT_APARTMENTTHREADED indicateur).
MTA Multithreaded Apartment (CoInitializeEx est appelé avec COINIT_MULTITHREADED indicateur).
None Le modèle de thread n’est pas spécifié.

Configuration d’un modèle de threading

Exemple : Pour demander un modèle de thread MTA à partir du balisage C++ :

class ThreadModelTests
{

    TEST_CLASS(ThreadModelTests);

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

Vous pouvez également demander la propriété de modèle de thread pour une classe ou un module. Par exemple,

class ThreadModelTestsWithMTADefault
{

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

    TEST_METHOD(DefaultWithMTASetByClass);
};

De même, vous pouvez également demander un modèle de thread pour les tests managés :

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

Notez que dans le dernier test ci-dessus : SetsOfMetadataTest, il est également possible d’utiliser des jeux de métadonnées et d’exécuter le même test : d’abord avec le modèle de thread sta, puis avec MTA.