Penanganan opsi adalah inti dari pendekatan modular Trade Federation. Secara khusus, opsi
adalah mekanisme yang memungkinkan developer, Integrator, dan Test Runner bekerja sama tanpa
harus menduplikasi pekerjaan satu sama lain. Sederhananya, penerapan penanganan opsi kami memungkinkan developer menandai anggota class Java sebagai dapat dikonfigurasi, yang kemudian nilai anggota tersebut dapat ditambah atau diganti oleh Integrator, dan selanjutnya dapat ditambah atau diganti oleh Test Runner. Mekanisme ini berfungsi untuk semua jenis intrinsik Java, serta untuk semua instance Map
atau Collection
dari jenis intrinsik.
Catatan: Mekanisme penanganan opsi hanya berfungsi untuk class yang menerapkan salah satu antarmuka yang disertakan dalam Siklus Proses Pengujian, dan hanya saat class tersebut di-instansiasi oleh mekanisme siklus proses.
Developer
Untuk memulai, developer menandai anggota dengan anotasi
@Option
.
Mereka menentukan (setidaknya) nilai name
dan description
, yang
menentukan nama argumen yang terkait dengan Opsi tersebut, dan deskripsi yang ditampilkan di
konsol TF saat perintah dijalankan dengan --help
atau --help-all
.
Sebagai contoh, misalkan kita ingin membuat pengujian telepon fungsional yang memanggil berbagai nomor telepon, dan mengharapkan untuk menerima urutan nada DTMF dari setiap nomor setelah terhubung.
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 }
Hanya itu yang diperlukan developer untuk menyiapkan dua titik konfigurasi untuk pengujian tersebut. Kemudian, mereka dapat menggunakan mWaitTime
dan mCalls
seperti biasa,
tanpa terlalu memperhatikan fakta bahwa keduanya dapat dikonfigurasi. Karena kolom
@Option
ditetapkan setelah class di-instance, tetapi sebelum metode
run
dipanggil, hal ini memberikan cara mudah bagi pengimplementasi untuk menyiapkan default untuk
atau melakukan semacam pemfilteran pada kolom Map
dan Collection
, yang
sebaliknya hanya dapat ditambahkan.
Integrator
Integrator bekerja di dunia konfigurasi, yang ditulis dalam XML. Format config
memungkinkan Integrator menetapkan (atau menambahkan) nilai untuk kolom @Option
apa pun. Misalnya,
Integrator ingin menentukan pengujian latensi yang lebih rendah yang memanggil nomor default, serta
pengujian yang berjalan lama yang memanggil berbagai nomor. Mereka dapat membuat sepasang konfigurasi
yang mungkin terlihat seperti berikut:
<?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>
Test Runner
Runner Pengujian juga memiliki akses ke titik konfigurasi ini melalui konsol Trade Federation.
Pertama dan terutama, mereka menjalankan perintah (yaitu, konfigurasi dan semua argumennya) dengan
instruksi run command <name>
(atau run <name>
singkatnya).
Selain itu, mereka dapat menentukan daftar argumen apa pun yang merupakan bagian dari perintah, yang dapat menggantikan atau ditambahkan ke kolom yang ditentukan oleh objek siklus proses dalam setiap konfigurasi.
Untuk menjalankan pengujian latensi rendah dengan nomor telepon many-numbers
, Test Runner
dapat menjalankan:
tf> run low-latency.xml --call 111-111-1111 #*#*TEST1*#*# --call 222-222-2222 #*#*TEST2*#*#
Atau, untuk mendapatkan efek serupa dari arah yang berlawanan, Test Runner dapat mengurangi waktu tunggu
untuk pengujian many-numbers
:
tf> run many-numbers.xml --timeout 5000
Urutan opsi
Anda mungkin melihat bahwa implementasi yang mendasari opsi call
adalah Map
sehingga setelah --call
berulang di command line, semuanya akan disimpan.
Opsi timeout
, yang memiliki implementasi pokok long
,
hanya dapat menyimpan satu nilai. Jadi, hanya nilai terakhir yang ditentukan yang disimpan.
--timeout 5 --timeout 10
menghasilkan timeout
yang berisi 10.
Jika List
atau Collection
sebagai implementasi yang mendasarinya,
semua nilai disimpan, dalam urutan yang ditentukan di command line.
Opsi Boolean
Opsi jenis boolean yang mendasarinya dapat disetel ke true
dengan meneruskan nama opsi secara langsung, misalnya, --[option-name]
dan dapat disetel ke false
menggunakan
sintaksis --no-[option-name]
.