线程模型
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。