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