Partilhar via


Metadados condicionais

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

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 da nossa linguagem de consulta de seleção. Os valores das variáveis vêm de parâmetros de runtime.

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 runtime. Portanto, se o usuário definir o parâmetro de runtime "NoElevation" como true, o teste terá metadados aplicados a ele com o nome "Ignorar" 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 runtime.

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 Baixo, o teste será invocado apenas três vezes devido à fonte de dados leve. Se o usuário definir TestCaseLevel como Alto, a fonte de dados PICT será usada para gerar muito mais parâmetros para o teste. Se TestCaseLevel não estiver definido como Alto ou Baixo, nenhum metadado será adicionado.

Valores padrão

Quando você 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 [padrão].

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 Baixo ou Alto, Pict:Order será definido como 2. Se o usuário definir TestCaseLevel como Baixo ou Alto, 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 true.

Tenha cuidado para não deixar de fora o [padrão] se 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 Baixo, 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")

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