スレッド モデル
TAEF には、テストを実行する環境の COM スレッド モデルを事前に構成するための機能が用意されています。 既定では、マネージド © #) テストとスクリプト テストは STA スレッドで実行されます。ネイティブ テストでは、スレッド モデルは事前に構成されていません。
"ThreadingModel" メタデータ プロパティは、スレッド モデルを要求するために使用されます。 このプロパティでサポートされる値は、以下のとおりです。
プロパティ値 | 説明 |
---|---|
STA | シングルスレッド アパートメントです (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 の順に使用します。