Compartilhar via


Metadados condicionais

Às vezes, é útil ter valores de metadados alterados dependendo dos valores de runtime. 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 cercada por 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 tempo de execução. 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 metadados 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 verdadeira, você poderá anexar ao nome do metadado a etiqueta [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 será aplicado porque pelo menos uma condição nesse teste do Pict:Order avaliou como verdadeiro.

Tenha cuidado para não deixar de fora o [padrão] caso ele 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 Baixo, o conjunto acima de metadados 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á "1" ou "2" para a ordem PICT.