有時,讓中繼資料值根據運行時值來變化會很有用。 條件式中繼資料允許模組、類別或方法中繼資料僅根據 執行階段參數在特定條件下套用。
語法
若要將中繼資料設為條件式,請在中繼資料名稱後面新增以方括弧括住的條件。 條件必須採用我們的 選擇查詢語言的格式。 變數的值來自 執行時期參數。
例如,假設測試具有下列中繼資料:
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,則由於 輕量型資料來源,測試只會叫用 3 次。 如果使用者將 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 檢測中,至少有一個條件被判斷為真。
如果需要,請注意不要省略 [預設]。
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 資料來源會對 PICT 順序使用 1 還是 2。