Seçenek işleme, Ticaret Federasyonu'nun modüler yaklaşımının temelini oluşturur. Özellikle seçenekler, geliştiricinin, entegratörün ve test çalıştırıcının birbirlerinin çalışmalarını kopyalamak zorunda kalmadan birlikte çalışabileceği mekanizmadır. Basitçe ifade etmek gerekirse, seçenek işleme uygulamamız, geliştiricinin bir Java sınıfı üyesini yapılandırılabilir olarak işaretlemesine olanak tanır. Bu noktada, söz konusu üyenin değeri entegratör tarafından artırılabilir veya geçersiz kılınabilir ve daha sonra test çalıştırıcı tarafından artırılabilir veya geçersiz kılınabilir. Bu mekanizma, tüm Java yerleşik türlerinin yanı sıra yerleşik türlerin tüm Map
veya Collection
örnekleri için çalışır.
Not: Seçenek işleme mekanizması yalnızca Test Yaşam Döngüsü'nde yer alan arayüzlerden birini uygulayan sınıflar için ve yalnızca bu sınıf yaşam döngüsü mekanizması tarafından örneklendiğinde çalışır.
Geliştirici
Başlangıçta geliştirici, bir üyeyi @Option
ek açıklamasıyla işaretler.
Bu değerler, en azından name
ve description
değerlerini belirtir. Bu değerler, ilgili Seçenek ile ilişkili bağımsız değişken adını ve komut --help
veya --help-all
ile çalıştırıldığında TF konsolunda gösterilen açıklamayı belirtir.
Örneğin, çeşitli telefon numaralarını arayan ve bağlandıktan sonra her numaradan bir DTMF tonu dizisi almayı bekleyen işlevsel bir telefon testi oluşturmak istediğimizi varsayalım.
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 }
Geliştiricinin bu test için iki yapılandırma noktası ayarlaması için gereken tek şey budur. Ardından, yapılandırılabilir olduklarına fazla dikkat etmeden mWaitTime
ve mCalls
'yi normal şekilde kullanabilirler. @Option
alanları, sınıf oluşturulduktan sonra ancak run
yöntemi çağrılmadan önce ayarlandığından, uygulayıcıların Map
ve Collection
alanları için varsayılan değerleri ayarlamasına veya bu alanlarda bir tür filtreleme yapmasına olanak tanır. Bu alanlar aksi takdirde yalnızca ekleme yapılabilen alanlardır.
Entegre eden
Entegrasyon uzmanı, XML ile yazılmış yapılandırmalar dünyasında çalışır. Yapılandırma biçimi, entegratörün herhangi bir @Option
alanı için değer ayarlamasına (veya eklemesine) olanak tanır. Örneğin, entegratörün hem varsayılan numarayı arayan düşük gecikmeli bir test hem de çeşitli numaraları arayan uzun süreli bir test tanımlamak istediğini varsayalım. Aşağıdaki gibi bir yapılandırma çifti oluşturabilirler:
<?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 Çalıştırıcı
Test Runner, Trade Federation konsolu üzerinden de bu yapılandırma noktalarına erişebilir.
Öncelikle, run command <name>
talimatıyla (veya kısaca run <name>
) bir komut (yani bir yapılandırma ve tüm bağımsız değişkenleri) çalıştırırlar.
Bunun dışında, komutun bir parçası olan herhangi bir bağımsız değişken listesini belirtebilirler. Bu liste, her yapılandırmadaki yaşam döngüsü nesneleri tarafından belirtilen alanların yerini alabilir veya bu alanlara eklenebilir.
Test Runner, many-numbers
telefon numaralarıyla düşük gecikme testini çalıştırmak için şunları yürütebilir:
tf> run low-latency.xml --call 111-111-1111 #*#*TEST1*#*# --call 222-222-2222 #*#*TEST2*#*#
Alternatif olarak, ters yönde benzer bir etki elde etmek için Test Çalıştırıcı, many-numbers
testi için bekleme süresini azaltabilir:
tf> run many-numbers.xml --timeout 5000
Seçenek sıralaması
Temel uygulamadaki call
seçeneğinin Map
olduğunu fark edebilirsiniz. Bu nedenle, komut satırında --call
tekrarlandığında tümü depolanır.
timeout
seçeneği, long
temel uygulamasına sahiptir ve yalnızca bir değer depolayabilir. Bu nedenle yalnızca belirtilen son değer depolanır.
timeout
içinde 10 içeren --timeout 5 --timeout 10
sonuç
Temel uygulama olarak List
veya Collection
kullanılıyorsa tüm değerler, komut satırında belirtilen sırayla saklanır.
Boole seçenekleri
Boole temel türü seçenekleri, doğrudan seçenek adı (ör. --[option-name]
) iletilerek true
olarak ayarlanabilir ve --no-[option-name]
söz dizimi kullanılarak false
olarak ayarlanabilir.