次の方法で共有


スレッド モデル

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 の順に使用します。