Penanganan opsi merupakan inti pendekatan modular Trade Federation. Secara khusus, opsi
adalah mekanisme yang digunakan developer, Integrator, dan Test Runner untuk bekerja sama tanpa
harus menduplikasi pekerjaan satu sama lain. Sederhananya, implementasi penanganan opsi kami memungkinkan
developer menandai anggota class Java sebagai dapat dikonfigurasi, pada saat nilai anggota tersebut
dapat ditambah atau diganti oleh Integrator, dan kemudian dapat ditambah atau diganti oleh
Test Runner. Mekanisme ini berfungsi untuk semua jenis intrinsik Java, serta untuk semua
Instance Map
atau Collection
jenis intrinsik.
Catatan: Mekanisme penanganan opsi hanya berfungsi untuk class yang mengimplementasikan salah satu antarmuka yang disertakan dalam Siklus Proses Pengujian, dan hanya jika class tersebut dibuat instance-nya oleh mesin siklus proses.
Developer
Untuk memulai, developer menandai anggota dengan
anotasi @Option
.
Perintah ini menentukan (minimal) 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, misalnya kita ingin membuat pengujian telepon fungsional yang menghubungi 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 }
Itu saja yang diperlukan developer untuk menyiapkan dua titik konfigurasi
uji coba. Kemudian mereka dapat keluar dan menggunakan mWaitTime
dan mCalls
seperti biasa,
tanpa memperhatikan banyak fakta bahwa
mereka dapat dikonfigurasi. Karena
kolom @Option
ditetapkan setelah class dibuat instance-nya, tetapi sebelum
metode run
dipanggil, hal ini memberikan cara mudah bagi implementor untuk menyiapkan default untuk
atau melakukan semacam pemfilteran pada kolom Map
dan Collection
, yang
hanya dapat ditambahkan.
Integrator
Integrator berfungsi di dunia konfigurasi, yang ditulis dalam XML. Format konfigurasi
memungkinkan Integrator menetapkan (atau menambahkan) nilai untuk kolom @Option
apa pun. Contohnya,
anggaplah Integrator ingin mendefinisikan pengujian berlatensi lebih rendah yang memanggil jumlah default,
sebagai pengujian yang berjalan lama
yang memanggil berbagai angka. Mereka bisa 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>
Runner Pengujian
Test Runner juga memiliki akses ke titik konfigurasi ini melalui konsol Trade Federation.
Pertama-tama, mereka menjalankan perintah (yaitu, konfigurasi dan semua argumennya) dengan
instruksi run command <name>
(atau run <name>
untuk singkatnya).
Di luar itu, mereka dapat menentukan daftar argumen 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
, Runner Pengujian
dapat menjalankan:
tf> run low-latency.xml --call 111-111-1111 #*#*TEST1*#*# --call 222-222-2222 #*#*TEST2*#*#
Atau, untuk mendapatkan efek yang serupa dari arah yang berlawanan, Runner Pengujian dapat mengurangi waktu tunggu
untuk pengujian many-numbers
:
tf> run many-numbers.xml --timeout 5000
Urutan opsi
Anda mungkin melihat bahwa opsi call
yang mendasari implementasi adalah Map
sehingga setelah --call
berulang di command line, semuanya akan disimpan.
Opsi timeout
, yang memiliki implementasi dasar dari 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 pada baris perintah.
Opsi boolean
Opsi jenis dasar boolean dapat ditetapkan ke true
dengan meneruskan
nama opsi secara langsung, misalnya, --[option-name]
dan dapat ditetapkan ke false
menggunakan
sintaksis --no-[option-name]
.