Partilhar via


Isolamento de teste

O TAEF dá suporte à execução de testes em um processo isolado. É possível controlar quando esses processos são substituídos pelos metadados IsolationLevel e pela opção de linha de comando. Isso pode ser útil para detectar 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 da opção de linha de comando e metadados IsolationLevel e seus significados.

None
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.

Assembly
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 usará um host 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
Mesmo que o Método

O valor de metadados IsolationLevel usado é os metadados especificados mais próximos do nível de teste. Se a opção IsolationLevel da linha de comando 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 outro 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, uma classe ou um teste for expandido ou controlado por dados e for isolado, cada metadado e/ou expansão de dados será isolado. 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.