Поделиться через


Условные метаданные

Иногда бывает полезно изменить значения метаданных в зависимости от значений среды выполнения. Условные метаданные позволяют применять метаданные модуля, класса или метода только в определенных условиях на основе параметров среды выполнения.

Синтаксис

Чтобы сделать метаданные условными, добавьте условие в квадратные скобки после имени метаданных. Условие должно быть в формате языка запросов выбора. Значения переменных поступают из параметров среды выполнения.

Например, предположим, что тест содержит следующие метаданные:

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

Затем, когда TAEF загрузит библиотеку DLL, она вычисляет условие "@NoElevation=true" на основе параметров среды выполнения. Поэтому, если пользователь задает для параметра среды выполнения NoElevation значение true, к тесту будут применены метаданные с именем Ignore и значением true.

Если в одном тесте отображается несколько условных метаданных, каждый из них оценивается независимо одинаково. Это может быть полезно, если вы хотите, чтобы тест распознал несколько возможных значений параметра среды выполнения.

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")

Если тест содержит метаданные, показанные выше, и пользователь устанавливает для TestCaseLevel значение Low, тест будет вызываться только три раза из-за упрощенного источника данных. Если пользователь устанавливает для TestCaseLevel значение High, источник данных PICT будет использоваться для создания множества дополнительных параметров для теста. Если для TestCaseLevel не задано значение High или Low, метаданные добавляться не будут.

Значения по умолчанию

Если требуется добавить метаданные только в том случае, если никакие другие условия для этого конкретного имени метаданных не были оценены как true, можно добавить имя метаданных с параметром [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")

Если тест содержит указанные выше метаданные и пользователь не устанавливает для TestCaseLevel значение Low или High, pict:Order будет иметь значение 2. Если пользователь устанавливает для TestCaseLevel значение Low или High, pict:Order будет иметь значение 1 или 3 соответственно. Значение 2 не применяется, так как по крайней мере одно условие этого теста для Pict:Order оценено как true.

Будьте осторожны, чтобы не оставить значение [по умолчанию], если это необходимо.

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")

Если для TestCaseLevel задано значение Low, указанный выше набор метаданных эквивалентен следующему набору метаданных:

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")

В этом случае не указано, будет ли источник данных PICT использовать "1" или "2" для заказа PICT.