विकल्पों को मैनेज करने की सुविधा, Trade Federation के मॉड्यूलर अप्रोच का अहम हिस्सा है. खास तौर पर, विकल्प वह तरीका है जिससे डेवलपर, इंटिग्रेटर, और टेस्ट रनर एक-दूसरे के काम को डुप्लीकेट किए बिना, मिलकर काम कर सकते हैं. आसान शब्दों में कहें, तो विकल्पों को मैनेज करने की हमारी सुविधा की मदद से, डेवलपर किसी Java क्लास के सदस्य को कॉन्फ़िगर करने लायक के तौर पर मार्क कर सकता है. इसके बाद, इंटिग्रेटर उस सदस्य की वैल्यू को बढ़ा सकता है या बदल सकता है. साथ ही, टेस्ट रनर भी उस वैल्यू को बढ़ा सकता है या बदल सकता है. यह तरीका, Java के सभी इंट्रिंसिक टाइप के साथ-साथ, इंट्रिंसिक टाइप के किसी भी Map या Collection इंस्टेंस के लिए काम करता है.
डेवलपर
शुरुआत में, डेवलपर किसी सदस्य को @Option एनोटेशन के साथ मार्क करता है.
वे कम से कम name और description वैल्यू तय करते हैं. इनसे उस विकल्प से जुड़े आर्ग्युमेंट का नाम और वह ब्यौरा तय होता है जो --help या --help-all के साथ कमांड चलाने पर, टीएफ़ कंसोल पर दिखता है.
उदाहरण के लिए, मान लें कि हमें फ़ोन की फ़ंक्शनल जांच करनी है. इसके लिए, हमें अलग-अलग फ़ोन नंबर डायल करने हैं. साथ ही, हर नंबर के कनेक्ट होने के बाद, हमें डीटीएमएफ़ टोन की एक सीक्वेस मिलने की उम्मीद है.
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 }
डेवलपर को उस जांच के लिए, कॉन्फ़िगरेशन के दो पॉइंट सेट अप करने के लिए बस इतना ही करना होता है. इसके बाद, वे mWaitTime और mCalls का इस्तेमाल सामान्य तरीके से कर सकते हैं. उन्हें इस बात पर ज़्यादा ध्यान देने की ज़रूरत नहीं है कि इन्हें कॉन्फ़िगर किया जा सकता है. ऐसा इसलिए, क्योंकि @Option फ़ील्ड, क्लास के इंस्टैंशिएट होने के बाद सेट किए जाते हैं. हालांकि, run तरीके को कॉल करने से पहले, इन्हें सेट किया जाता है. इससे, लागू करने वालों के लिए Map और Collection फ़ील्ड के लिए डिफ़ॉल्ट सेट अप करना या उन पर किसी तरह का फ़िल्टरिंग करना आसान हो जाता है. ऐसा इसलिए, क्योंकि इन्हें सिर्फ़ जोड़ा जा सकता है.
इंटिग्रेटर
इंटिग्रेटर, कॉन्फ़िगरेशन की दुनिया में काम करता है. ये कॉन्फ़िगरेशन, एक्सएमएल में लिखे जाते हैं. कॉन्फ़िगरेशन फ़ॉर्मैट की मदद से, इंटिग्रेटर किसी भी @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 का इस्तेमाल करने पर, ये सभी वैल्यू सेव हो जाती हैं.
timeout विकल्प को लागू करने के लिए, long का इस्तेमाल किया जाता है. इसलिए, इसमें सिर्फ़ एक वैल्यू सेव की जा सकती है. इसलिए, सिर्फ़ तय की गई आखिरी वैल्यू सेव होती है.
--timeout 5 --timeout 10 का मतलब है कि timeout में 10 सेव होगा.
List या Collection को लागू करने के लिए, सभी वैल्यू सेव की जाती हैं. ये वैल्यू, कमांड लाइन पर तय किए गए क्रम में सेव होती हैं.
बूलियन विकल्प
बूलियन टाइप के विकल्पों को true पर सेट करने के लिए, विकल्प का नाम सीधे तौर पर पास किया जा सकता है. उदाहरण के लिए, --[option-name]. इन्हें false पर सेट करने के लिए, --no-[option-name] सिंटैक्स का इस्तेमाल किया जा सकता है.