测试隔离

TAEF 支持在独立进程中运行测试。 可以控制何时将这些进程替换为 IsolationLevel 元数据和命令行选项。 这对于检测意外的测试依赖项或减少泄漏测试的影响非常有用。

以下列表显示了 IsolationLevel 元数据和命令行选项的可能值及其含义。

None
TAEF 不会隔离任何测试。

模块
TAEF 将为每个测试 DLL 使用单独的进程主机。 这是默认值。

Assembly
与模块相同

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 的三个值不是隔离的,因为它们位于同一执行组中。