[選択]
Test Authoring and Execution Framework (TAEF) は、指定したメタデータ情報に基づいて特定のテストを選択的に実行または省略するメカニズムを提供します。 次のセクションでは、TE.exe でこの選択メカニズムを使用する方法のさまざまな例について説明します。
コマンド プロンプト ウィンドウから TE.exe を実行できます。
TE <test_binaries> [/select:<selection criteria>]
このセクションでは、TE.exe /select:selection criteria について説明します。 TE.exe の詳細については、「Te.exe のコマンド オプション」を参照してください。
選択条件は、コマンド プロンプトで指定されたすべてのテスト バイナリにグローバルに適用されます。 Examples\CPP.SelectionCriteria1.Example.dll と Examples\CPP.SelectionCriteria2.Example.dll という 2 つのテスト バイナリを考えてみましょう。 次の例は、これらのテスト バイナリのさまざまなレベルで指定されたプロパティ (メタデータ) を示しています。 これは、コマンド プロンプト ウィンドウから /listproperties オプションを指定して取得することもできます。
CPP.SelectionCriteria1.Example.dll (Owner="C1", Priority=3)
class11 (Owner="C2")
method111(Priority=1)
method112 (BackwardsCompatibility="Windows 2000")
class12
method121
CPP.SelectionCriteria2.Example.dll (Owner="WEX")
class21 (Owner="C1", Priority=2, BackwardsCompatibility="Windows XP")
method211 (Owner="C2")
class22 (Owner="U3")
method221
つまり、これらの各テスト バイナリで /listproperties を個別に使用すると、次の情報が得られます。
F:\fsd1.binaries.x86chk\WexTest\C1\TestExecution>te Examples\CPP.SelectionCriteria1.Example.dll /listproperties
Test Authoring and Execution Framework v2.2 Build 6.1.7689.0 (release.091218-1251) for x86
F:\fsd1.binaries.x86chk\WexTest\C1\TestExecution\Examples\CPP.SelectionCriteria1.Example.dll
Property[Owner] = C1
Property[Priority] = 3
WEX::TestExecution::Examples::Class11
Property[Owner] = C2
WEX::TestExecution::Examples::Class11::Method111
Property[Priority] = 1
WEX::TestExecution::Examples::Class11::Method112
Property[BackwardsCompatibility] = Windows2000
WEX::TestExecution::Examples::Class12
WEX::TestExecution::Examples::Class12::Method121
および
F:\fsd1.binaries.x86chk\WexTest\C1\TestExecution>te Examples\CPP.SelectionCriteria2.Example.dll /listproperties
Test Authoring and Execution Framework v2.2 Build 6.1.7689.0 (release.091218-1251) for x86
F:\fsd1.binaries.x86chk\WexTest\C1\TestExecution\Examples\CPP.SelectionCriteria2.Example.dll
Property[Owner] = WEX
WEX::TestExecution::Examples::Class21
Property[BackwardsCompatibility] = Windows XP
Property[Owner] = C1
Property[Priority] = 2
WEX::TestExecution::Examples::Class21::Method211
Property[Owner] = C2
WEX::TestExecution::Examples::Class22
Property[Owner] = U3
WEX::TestExecution::Examples::Class22::Method221
このとき、テスト バイナリが完全なパスと共に一覧表示され、ネイティブのテスト バイナリの場合は "<Namespace>::<ClassName>"、マネージド テスト バイナリの場合はクラス名が "<Namespace>.<ClassName>" として表示されることに注意してください。 同様に、テスト メソッドの名前も、ネイティブ テスト バイナリの場合は "<Namespace>::<ClassName>::<TestMethodName>"、マネージド テスト バイナリの場合は "<Namespace>.<ClassName>.<TestMethodName>" として一覧表示されます。
つまり、te には、すべての名前または関数の完全修飾名が保存されます。 これは、任意のメソッドを一意に区別できるようにするためです。 たとえば、2 つのクラスのメソッド名が同じである場合、クラス修飾は、目的のメソッドを一意に選択するのに役立ちます。 この場合、選択条件があることで、指定されたテスト バイナリの条件に一致するテストのみを実行することができます。
上記の例、たとえば Examples\Cpp.SelectionCriteria1.Example.dll では、次のいずれの選択基準でも "Method111" を選択できます。
Te.exe Examples\CPP.SelectionCriteria1.Example.dll /select:"@Name='WEX::TestExecution::Examples::Class11::Method111'"
Te.exe Examples\CPP.SelectionCriteria1.Example.dll /select:"@Name='*Class11::Method111'"
Te.exe Examples\CPP.SelectionCriteria1.Example.dll /select:"@Name='*Method111'"
"Priority" が 2 未満でマークされているすべてのテストを実行するには、次のコマンドを実行します。
Te.exe Examples\CPP.SelectionCriteria1.Example.dll Examples\CPP.SelectionCriteria2.Example.dll /select:"@Priority < 2"
この場合、先ほどの例で実行されるのは Examples\CPP.SelectionCriteria1.Example.dll の "class11::method111" のみです。
class11 のすべてのテストを実行する場合は、修飾された "Name" プロパティとワイルド カードのマッチングを使用して、次のように選択できます。
Te.exe Examples\CPP.SelectionCriteria1.Example.dll Examples\CPP.SelectionCriteria2.Example.dll
/select:"@Name='*::class11::*'"
選択条件を使用する際は、次の点に注意してください。
- "and"、"not"、"or" は 予約語 であり、 大文字と小文字は区別されません。
- メタデータ プロパティの名前と値では、大文字と小文字が区別されません。たとえば、この例の "C2" は "c2" と "C2" に一致します。 そのため、メタデータ "property" を持つ関数と "Property" を持つ関数があり、選択条件が "PROPERTY" を探している場合は、これら両方に一致します。
- 選択クエリ文字列の文字列値は、一重引用符で囲む必要があります。 選択クエリの文字列値に出現する "?" は、1 つのワイルドカード文字であり、"*" は 0 個以上のワイルドカード文字です。
- コマンド プロンプトで引用符を使用するとき、 選択クエリを他からコピーする際はスマート引用符に注意してください。 Outlook の電子メールから選択クエリをコピーすると、意図せずスマート引用符が使用され、TAEF で解析できない可能性があります。 引用符は直接入力するようにしてください。
複合選択条件の簡単な例とその実行内容を見てみましょう。
Te.exe Examples\CPP.SelectionCriteria1.Example.dll Examples\CPP.SelectionCriteria2.Example.dll \
/select:"@Owner='C2' AND @Priority=2"
これにより、以下が実行されます。
- Examples\CPP.SelectionCriteria2.Example.dll の class21::method211
Te.exe Examples\CPP.SelectionCriteria1.Example.dll Examples\CPP.SelectionCriteria2.Example.dll \
/select:"@Owner='C2' AND @Priority=3"
これにより、以下が実行されます。
- Examples\CPP.SelectionCriteria1.Example.dll の class11::method112
Te.exe Examples\CPP.SelectionCriteria1.Example.dll Examples\CPP.SelectionCriteria2.Example.dll \
/select:"@Owner='U3' oR @Priority=1"
これにより、以下が実行されます。
- Examples\CPP.SelectionCriteria1.Example.dll の class11::method111
- Examples\CPP.SelectionCriteria2.Example.dll の class22::method221
Te.exe Examples\CPP.SelectionCriteria1.Example.dll Examples\CPP.SelectionCriteria2.Example.dll \
/select:"not(@BackwardsCompatibility=*)"
BackwardsCompatibility 値が指定されていないすべてのテストが実行されます。 (次の項目を参照してください。)
- Examples\CPP.SelectionCriteria1.Example.dll の class11::method111、class12::method121
- Examples\CPP.SelectionCriteria2.Example.dll の class22::method221
Te.exe Examples\CPP.SelectionCriteria1.Example.dll Examples\CPP.SelectionCriteria2.Example.dll \
/select:"@Owner='C*'"
Owner の値が "C" (大文字と小文字は区別されません) で始まるすべてのテストが実行されます。 したがって、前のコマンドでは Examples\CPP.SelectionCriteria1.Example.dll のすべてのテストおよび Examples\CPP.SelectionCriteria2.Example.dll の class21 のすべてのテスト (すなわち method211) が実行されます
Te.exe Examples\CPP.SelectionCriteria1.Example.dll Examples\CPP.SelectionCriteria2.Example.dll \
/select:"not(@BackwardsCompatibility=*) OR (@Owner='C*' AND @BackwardsCompatibility='*XP*')"
BackwardsCompatibility が指定されていないか、所有者名が "C" で始まり、backwardsCompatibilty 値に XP が含まれるすべてのテストが実行されます。 かっこ "(" と ")" を使用して優先順位を指定する方法に注意してください。
この例では、以下が選択的に実行されます。
- Examples\CPP.SelectionCriteria1.Example.dll の class11::method111、class12::method121
- Examples\CPP.SelectionCriteria2.Example.dll の class21::method211、class22::method221
Te.exe Examples\CPP.SelectionCriteria1.Example.dll Examples\CPP.SelectionCriteria2.Example.dll /select:"@Owner='???'"
プロパティ owner の値が 3 文字のみであるテストが選択的に実行されます。
この例では、"C" と一致し、以下が選択的に実行されます。
- Examples\CPP.SelectionCriteria1.Example.dll の class12::method121
Te.exe Examples\CPP.SelectionCriteria1.Example.dll Examples\CPP.SelectionCriteria2.Example.dll /select:"@Priority>=1"
Note
これは、浮動小数点値を持つプロパティに ">="、"<="、">"、"<" を使用する方法の好例です。
この例では、Examples\CPP.SelectionCriteria2.Example.dll の class22::method221 (prority が指定されていない) を除くすべてのメソッドが実行されます。 つまり、以下が実行されます。
- Examples\CPP.SelectionCriteria1.Example.dll の class11::method111、class11::method112、class12::method121
- Examples\CPP.SelectionCriteria2.Example.dll の class21::method211
「/select」は、「/list」「/listproperties」などの他のコマンド オプションと組み合わせて使用できることに注意してください。
スマート クォート
Outlook や Word 文書から選択条件をコピーしてコマンド プロンプトにコピーすると、選択条件にスマート引用符が表示されることがあります。 スマート引用符の詳細については、「スマート引用符: コンピューターで処理されるテキストに潜む落とし穴」を参照してください。
スマートクォートを回避する簡単な方法はありません。最良の方法は、コマンド プロンプトにコピーした選択条件内の "二重引用符と " 一重引用符" をすべて削除して、クエリの引用符部分を再入力することです。
Outlook でメッセージを作成するときに、これらをオフにするオプション設定があります。 Outlook のヘルプ ボックスに「スマート クォート」と入力すると情報が表示されます。
名前に基づく簡単選択
TAEF では、コマンド プロンプトで "/name" コマンド ライン パラメーターを使用することで、名前に基づく簡単な選択が可能です。
/name:<test name with wildcards>
は以下に匹敵します。
/select:@Name='<test name with wildcards>'
つまり、次のように、名前に基づいて選択クエリを指定できるようになりました。
Te.exe Examples\CPP.SelectionCriteria1.Example.dll Examples\CPP.SelectionCriteria2.Example.dll \
/select:"@Name='*::class11::*'"
/name を使用すれば、もっと簡単に次のように記述できます。
Te.exe Examples\CPP.SelectionCriteria1.Example.dll Examples\CPP.SelectionCriteria2.Example.dll /name=*::class11::*
コマンド プロンプトで /name と /select の両方が指定されている場合、/name は無視され、/select が優先されることに注意してください。