執行緒模型
TAEF 提供針對測試執行環境預先設定 COM 執行緒模型的功能。 根據預設,Managed © #) 和腳本測試會在 STA 執行緒上執行;針對原生,未預先設定執行緒模型。
「ThreadingModel」 中繼資料屬性是用來要求執行緒模型。 此屬性的支援值為:
屬性值 | 描述 |
---|---|
STA | Single-Threaded Apartment (CoInitializeEx 是以 COINIT_APARTMENTTHREADED 旗標) 呼叫。 |
MTA | 使用 COINIT_MULTITHREADED 旗標) 呼叫多執行緒 Apartment (CoInitializeEx。 |
無 | 未指定執行緒模型。 |
設定執行緒模型
範例:若要向 C++ 標記要求 MTA 執行緒模型:
class ThreadModelTests
{
TEST_CLASS(ThreadModelTests);
BEGIN_TEST_METHOD(MTAThreadingModelTest)
TEST_METHOD_PROPERTY(L"ThreadingModel", L"STA")
END_TEST_METHOD()
};
您也可以要求類別或模組的執行緒模型屬性。 例如,
class ThreadModelTestsWithMTADefault
{
BEGIN_TEST_CLASS(ThreadModelTestsWithMTADefault)
TEST_CLASS_PROPERTY(L"ThreadingModel", L"Mta")
END_TEST_CLASS()
TEST_METHOD(DefaultWithMTASetByClass);
};
同樣地,您也可以要求受控測試的執行緒模型:
[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();
}
}
請注意,在上述最後一個測試中:SetsOfMetadataTest,也可以使用元資料集並執行相同的測試:先使用 STA 執行緒模型,然後再搭配 MTA。