オプション処理は、Trade Federation のモジュール型アプローチの中核です。特にオプションは、開発者、インテグレータ、テストランナーが互いの作業を重複させることなく連携できるメカニズムです。簡単に言うと、オプション処理の実装により、開発者は Java クラスメンバーを設定可能としてマークできます。その時点で、そのメンバーの値はインテグレータが拡張またはオーバーライドでき、その後、テストランナーが追加またはオーバーライドできます。このメカニズムは、すべての Java 組み込み型と、組み込み型の Map
または Collection
に対して機能します。
注: オプション処理メカニズムは、テストのライフサイクルに含まれるいずれかのインターフェースを実装するクラスに対してのみ機能し、またそのクラスがライフサイクルの仕組みによってインスタンス化される場合にのみ機能します。
開発者
まず、開発者がメンバーに @Option
アノテーションを付けます。(少なくとも)name
値と description
値を指定します。こうすると、このオプションに関連付けられた引数名と、コマンドを --help
または --help-all
で実行したときに TF コンソールに表示される説明を指定できます。
たとえば、さまざまな電話番号をダイヤルし、接続後に各番号から一連の DTMF トーンを受信する電話機能テストを作成するとします。
public class PhoneCallFuncTest extends IRemoteTest { @Option(name = "timeout", description = "How long to wait for connection, in millis") private long mWaitTime = 30 * 1000; // 30 seconds @Option(name = "call", description = "Key: Phone number to attempt. " + "Value: DTMF to expect. May be repeated.") private Map<String, String> mCalls = new HashMap<String, String>; public PhoneCallFuncTest() { mCalls.add("123-456-7890", "01134"); // default }
開発者がテスト用に 2 つの設定ポイントをセットアップするために必要なのはこれだけです。すると、設定可能であるということにはあまり注意を払わずに、通常どおり mWaitTime
と mCalls
を使用できます。@Option
フィールドは、クラスがインスタンス化された後、run
メソッドが呼び出される前に設定されるため、実装者は Map
と Collection
フィールドにデフォルトを設定する、またはなんらかのフィルタリングを行うことが容易になります。
インテグレータ
インテグレータは、XML で記述された設定の分野で作業します。設定フォーマットを使用すると、インテグレータは @Option
フィールドに任意の値を設定(または追加)できます。たとえばインテグレータが、デフォルトの番号を呼び出す低レイテンシ テストと、さまざまな番号を呼び出す長時間実行テストを定義するとします。次のような設定のペアを作成できます。
<?xml version="1.0" encoding="utf-8"?> <configuration description="low-latency default test; low-latency.xml"> <test class="com.example.PhoneCallFuncTest"> <option name="timeout" value="5000" /> </test> </configuration>
<?xml version="1.0" encoding="utf-8"?> <configuration description="call a bunch of numbers; many-numbers.xml"> <test class="com.example.PhoneCallFuncTest"> <option name="call" key="111-111-1111" value="#*#*TEST1*#*#" /> <option name="call" key="222-222-2222" value="#*#*TEST2*#*#" /> <!-- ... --> </test> </configuration>
テストランナー
テストランナーも、Trade Federation コンソールを介してこれらの設定ポイントにアクセスできます。
まず、run command <name>
命令(または略して run <name>
)でコマンド(つまり設定とすべての引数)を実行します。さらに、コマンドの一部である引数のリストを指定できます。これにより、各設定内のライフサイクル オブジェクトで指定されたフィールドを置き換えたり、フィールドに追加したりできます。
many-numbers
の電話番号で低レイテンシ テストを実行するために、テストランナーは次のコマンドを実行できます。
tf> run low-latency.xml --call 111-111-1111 #*#*TEST1*#*# --call 222-222-2222 #*#*TEST2*#*#
または、逆方向から同様の効果を得るために、テストランナーは many-numbers
テストの待機時間を短縮できます。
tf> run many-numbers.xml --timeout 5000
オプションの順番
実装の基となる call
オプションは Map
であるため、コマンドラインで --call
を繰り返すとすべてが格納されることに気付くかもしれません。
long
の基となる実装を持つオプション timeout
は、値を 1 つしか格納できません。そのため、最後に指定した値のみが格納されます。
--timeout 5 --timeout 10
は、値が 10 の timeout
になります。
基となる実装がList
または Collection
の場合、値はすべて、コマンドラインで指定された順序で格納されます。
ブール値のオプション
ブール値の基になるオプションは、オプション名(--[option-name]
など)を直接渡し、true
に設定できます。たとえば、構文 --no-[option-name]
を使用して false
に設定できます。