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.