Partilhar via


Metadados condicionais

Às vezes, é útil fazer com que os valores de metadados sejam alterados dependendo dos valores de tempo de execução. Os metadados condicionais permitem que os metadados de módulo, classe ou método sejam aplicados apenas em determinadas condições com base em parâmetros de tempo de execução.

Sintaxe

Para tornar os metadados condicionais, adicione uma condição entre colchetes após o nome dos metadados. A condição deve estar no formato do nosso idioma de consulta de seleção. Os valores para as variáveis vêm de parâmetros de tempo de execução.

Por exemplo, suponha que um teste tenha os seguintes metadados:

TEST_METHOD_PROPERTY(L"RunAs", L"Elevated")
TEST_METHOD_PROPERTY(L"Ignore[@NoElevation=true]", L"true")

Em seguida, quando o TAEF carregar a DLL, ele avaliará a condição "@NoElevation=true" com base nos parâmetros de tempo de execução. Portanto, se o usuário definir o parâmetro de tempo de execução "NoElevation" como true, o teste terá metadados aplicados a ele com o nome "Ignore" e o valor "true".

Se vários metadados condicionais aparecerem em um teste, cada um será avaliado independentemente da mesma maneira. Isso pode ser útil se você quiser que um teste reconheça vários valores possíveis de um parâmetro de tempo de execução.

TEST_METHOD_PROPERTY(L"Data:MyTestData[@TestCaseLevel='Low']", L"{ Datum1, Datum2, Datum3 }")
TEST_METHOD_PROPERTY(L"DataSource[@TestCaseLevel='High']", L"Pict:FullDataSet.model?Order=3")

Se um teste tiver os metadados mostrados acima e o usuário definir TestCaseLevel como Low, o teste só será invocado três vezes devido à fonte de dados leve. Se o usuário definir TestCaseLevel como High, a fonte de dados PICT será usada para gerar muito mais parâmetros para o teste. Se TestCaseLevel não estiver definido como High ou Low, nenhum metadados será adicionado.

Valores padrão

Quando quiser adicionar metadados somente quando nenhuma outra condição para esse nome de metadados específico tiver sido avaliada como true, você poderá acrescentar o nome dos metadados com [default].

TEST_METHOD_PROPERTY(L"DataSource", L"Pict:MyTest.model")
TEST_METHOD_PROPERTY(L"Pict:Order[@TestCaseLevel='Low']", L"1")
TEST_METHOD_PROPERTY(L"Pict:Order[default]", L"2")
TEST_METHOD_PROPERTY(L"Pict:Order[@TestCaseLevel='High']", L"3")

Se um teste tiver os metadados acima e o usuário não definir TestCaseLevel como Low ou High, Pict:Order será definido como 2. Se o usuário definir TestCaseLevel como Low ou High, Pict:Order será definido como 1 ou 3, respectivamente. O valor de 2 não se aplicará porque pelo menos uma condição nesse teste para Pict:Order foi avaliada como verdadeira.

Tenha cuidado para não omitir o [padrão], caso seja necessário.

TEST_METHOD_PROPERTY(L"DataSource", L"Pict:MyTest.model")
TEST_METHOD_PROPERTY(L"Pict:Order[@TestCaseLevel='Low']", L"1")
TEST_METHOD_PROPERTY(L"Pict:Order", L"2") // This should have [default]
TEST_METHOD_PROPERTY(L"Pict:Order[@TestCaseLevel='High']", L"3")

Se TestCaseLevel estiver definido como Low, o conjunto de metadados acima será equivalente ao seguinte conjunto de metadados:

TEST_METHOD_PROPERTY(L"DataSource", L"Pict:MyTest.model")
TEST_METHOD_PROPERTY(L"Pict:Order", L"1")
TEST_METHOD_PROPERTY(L"Pict:Order", L"2")

Neste caso, não é especificado se a fonte de dados PICT usará o "1" ou o "2" para a ordem PICT.