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.