TAEF 為測試執行的環境預先設定 COM 線程模型提供功能。 根據預設,Managed © #) 和腳本測試會在 STA 線程上執行;針對 Native,線程模型未預先設定。
“ThreadingModel” 元數據屬性可用來要求線程模型。 此屬性的支援值為:
| 屬性值 | 說明 |
|---|---|
| STA | Single-Threaded Apartment (CoInitializeEx 是以 COINIT_APARTMENTTHREADED 旗標呼叫)。 |
| MTA | 多線程 Apartment (CoInitializeEx 是以 COINIT_MULTITHREADED 旗標呼叫)。 |
| 沒有 | 未指定線程模型。 |
設定線程模型
範例:若要透過 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 執行。