共用方式為


線程模型

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 執行。