Freigeben über


Testisolation

TAEF unterstützt das Ausführen von Tests in einem isolierten Prozess. Es ist möglich zu steuern, wann diese Prozesse durch die Metadaten- und Befehlszeilenoption IsolationLevel ersetzt werden. Dies kann nützlich sein, um unbeabsichtigte Testabhängigkeiten zu erkennen oder die Auswirkungen eines Lecktests zu verringern.

Die folgende Liste zeigt die möglichen Werte der IsolationLevel-Metadaten- und Befehlszeilenoption und deren Bedeutung.

None
TAEF isoliert keine Tests.

Modul
TAEF verwendet für jede Test-DLL einen separaten Prozesshost. Dies ist der Standardwert.

Assembly
Identisch mit Dem Modul

DLL
Identisch mit Dem Modul

Klasse
TAEF verwendet einen separaten Prozesshost für jede Testklasse.

Methode
TAEF verwendet für jeden Test einen separaten Prozesshost. Wenn sich der Test innerhalb einer Ausführungsgruppe befindet, wird derselbe Prozesshost für die gesamte Ausführungsgruppe verwendet.

Test
Identisch mit Method

Der verwendete IsolationLevel-Metadatenwert entspricht den Metadaten, die der Testebene am nächsten liegen. Wenn auch die Befehlszeilenoption IsolationLevel festgelegt ist, wird der Wert verwendet, der die größte Isolation bereitstellt.

BEGIN_MODULE()
    MODULE_PROPERTY(L"IsolationLevel", L"Class")
END_MODULE()

class MyTestClass1
{
    TEST_CLASS(MyTestClass1);

    BEGIN_TEST_METHOD(MyTest1)
        TEST_METHOD_PROPERTY(L"IsolationLevel", L"Method")
    END_TEST_METHOD()

    TEST_METHOD(MyTest2);
    TEST_METHOD(MyTest3);
};

class MyTestClass2
{
    TEST_CLASS(MyTestClass2);

    TEST_METHOD(MyTest1);
    TEST_METHOD(MyTest2);
};

Im obigen Beispiel werden drei verschiedene Prozesshosts verwendet: eine für MyTestClass1::MyTest1, eine für die anderen beiden Methoden in MyTestClass1 und eine für MyTestClass2. Wenn der Benutzer /IsolationLevel:Method zur Befehlszeile des te.exe hinzufügen würde, würden fünf verschiedene Prozesshosts verwendet: einer für jeden Test.

Beachten Sie, dass, wenn ein Modul, eine Klasse oder ein Test metadatenerweiterungs- oder datengesteuert ist und isoliert werden soll, jede Metadaten- und/oder Datenerweiterung isoliert ist. Dies kann auf Testebene verhindert werden, indem der Test mitglied einer Ausführungsgruppe wird.

class MyTestClass3 :
{
    BEGIN_TEST_CLASS(MyTestClass3)
        TEST_CLASS_PROPERTY(L"Data:MyParameter1", L"{1, 2, 3}")
        TEST_CLASS_PROPERTY(L"IsolationLevel", L"Class")
    END_TEST_CLASS()

    BEGIN_TEST_METHOD(MyTest1)
        TEST_METHOD_PROPERTY(L"Data:MyParameter2", L"{1, 2, 3}")
        TEST_METHOD_PROPERTY(L"IsolationLevel", L"Method")
        TEST_METHOD_PROPERTY(L"ExecutionGroup", L"MyExecutionGroup")
    END_TEST_METHOD()

    TEST_METHOD(MyTest2);
    TEST_METHOD(MyTest3);
};

In diesem Beispiel werden sechs verschiedene Prozesshosts verwendet. Jeder der drei Werte von MyParameter1 ist isoliert, und MyTest1 ist von MyTest2 und MyTest3 isoliert. Die drei Werte von MyParameter2 sind nicht isoliert, da sie sich in derselben Ausführungsgruppe befinden.