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


Тестовая изоляция

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 не изолированы, так как они находятся в одной группе выполнения.