Поделиться через


Изоляция тестов

TAEF поддерживает выполнение тестов в изолированном процессе. Можно управлять заменой этих процессов, используя метаданные IsolationLevel и параметр командной строки. Это может быть полезно для обнаружения непреднамеренных зависимостей теста или снижения влияния утечки теста.

В следующем списке показаны возможные значения метаданных IsolationLevel и опции командной строки и их значения.

Нет
TAEF не изолирует никакие тесты.

Модуль
TAEF будет использовать отдельный хост процесса для каждой тестовой библиотеки DLL. Это значение по умолчанию.

сборка
То же, что и модуль

DLL
То же, что и модуль

Класс
TAEF будет использовать отдельный процесс-хост для каждого тестового класса.

Метод
TAEF будет использовать отдельный процесс-хост для каждого теста. Если тест находится в группе выполнения, тот же процессор будет использоваться для всей группы выполнения.

Тест
То же, что и метод

Значение метаданных IsolationLevel, которое используется, это те метаданные, которые указаны ближе всего к уровню теста. Если параметр IsolationLevel командной строки также задан, то используется значение, которое обеспечивает большую изоляцию.

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);
};

В приведенном выше примере используются три разных узла процесса: один для MyTestClass1::MyTest1, один для двух других методов в MyTestClass1 и один для MyTestClass2. Если пользователь должен был добавить /IsolationLevel:Method в командную строку te.exe, будут использоваться пять разных узлов процессов: по одному для каждого теста.

Обратите внимание, что если модуль, класс или тест расширенный метаданными или основан на данных, и их следует изолировать, все метаданные и/или расширение данных изолировано. Это можно предотвратить на уровне теста, сделав тест членом группы выполнения.

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);
};

В этом примере используются шесть разных хостов процессов. Каждый из трех значений MyParameter1 изолирован, и MyTest1 изолирован от MyTest2 и MyTest3. Три значения MyParameter2 не изолированы, так как они находятся в одной группе выполнения.