线程模型

TAEF 提供用于为测试执行的环境预配置 COM 线程模型的功能。 默认情况下,托管 © #) 和脚本测试在 STA 线程上运行;对于本机,未预配置线程模型。

“ThreadingModel”元数据属性用于请求线程模型。 此属性支持的值为:

属性值 说明
STA Single-Threaded公寓 (CoInitializeEx 使用COINIT_APARTMENTTHREADED标志) 调用。
MTA 多线程公寓 (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。