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