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.