条件付きのメタデータ
実行時の値に応じてメタデータ値を変更すると便利な場合があります。 条件付きメタデータを使用すると、モジュール、クラス、またはメソッドのメタデータを、ランタイム パラメーターに基づいて特定の条件でのみ適用できます。
構文
メタデータを条件付きにするには、メタデータ名の後に角かっこで囲まれた条件を追加します。 条件は、選択クエリ言語の形式である必要があります。 変数の値はランタイム パラメーターから取得されます。
たとえば、テストに次のメタデータがあるとします。
TEST_METHOD_PROPERTY(L"RunAs", L"Elevated")
TEST_METHOD_PROPERTY(L"Ignore[@NoElevation=true]", L"true")
次に、TAEF が DLL を読み込むと、ランタイム パラメーターに基づいて "@NoElevation=true" 条件が評価されます。 そのため、ユーザーが "NoElevation" ランタイム パラメーターを true に設定した場合、テストには "Ignore" という名前と値 "true" のメタデータが適用されます。
1 つのテストに複数の条件付きメタデータが表示される場合、それぞれが同じ方法で個別に評価されます。 これは、テストでランタイム パラメーターの複数の可能な値を認識させたい場合に役立ちます。
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 に設定されます。 Pict:Order のテストの少なくとも 1 つの条件が true に評価されるため、値 2 は適用されません。
必要な場合は、[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", 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 order に "1" または "2" のどちらを使用するかは指定されません。