Partilhar via


Isolamento de teste

O TAEF suporta a execução de testes em um processo isolado. É possível controlar quando esses processos são substituídos através dos metadados IsolationLevel e da opção de linha de comando. Isso pode ser útil para detetar dependências de teste não intencionais ou para reduzir o impacto de um teste de vazamento.

A lista a seguir mostra os valores possíveis dos metadados IsolationLevel e da opção de linha de comando e seus significados.

Nenhum
O TAEF não isolará nenhum teste.

Módulo
O TAEF usará um host de processo separado para cada DLL de teste. Este é o valor padrão.

Assembleia
O mesmo que o módulo

DLL
O mesmo que o módulo

Classe
O TAEF usará um host de processo separado para cada classe de teste.

Método
O TAEF utilizará um anfitrião de processo separado para cada teste. Se o teste estiver dentro de um grupo de execução, o mesmo host de processo será usado para todo o grupo de execução.

Teste
O mesmo que o método

O valor de metadados IsolationLevel usado é o especificado mais próximo do nível de teste. Se a opção de linha de comando IsolationLevel também estiver definida, o valor usado será o que fornece mais isolamento.

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

No exemplo acima, três hosts de processo diferentes são usados: um para MyTestClass1::MyTest1, um para os outros dois métodos em MyTestClass1 e um para MyTestClass2. Se o usuário adicionasse /IsolationLevel:Method à linha de comando do te.exe, cinco hosts de processo diferentes seriam usados: um para cada teste.

Observe que, se um módulo, classe ou teste for ampliado por metadados ou orientado por dados e for isolado, cada metadado e/ou cada expansão de dados serão isolados. Isso pode ser evitado no nível de teste, tornando o teste um membro de um grupo de execução.

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

Neste exemplo, seis hosts de processo diferentes são usados. Cada um dos três valores de MyParameter1 é isolado e MyTest1 é isolado de MyTest2 e MyTest3. Os três valores de MyParameter2 não são isolados, pois estão no mesmo grupo de execução.