विकल्प को मैनेज करने का तरीका, ट्रेड फ़ेडरेशन के मॉड्यूलर तरीके का सबसे अहम हिस्सा होता है. खास तौर पर, विकल्प
ऐसी तकनीक है जिसकी मदद से डेवलपर, इंटिग्रेटर, और टेस्ट रनर बिना किसी रुकावट के एक साथ काम कर सकते हैं
एक-दूसरे के काम की कॉपी नहीं बनानी पड़ती. आसान शब्दों में कहें, तो विकल्प हैंडलिंग के हमारे लागू होने से
डेवलपर को Java क्लास सदस्य को कॉन्फ़िगर करने लायक के रूप में चिह्नित करना होगा, जिस पर उस सदस्य का मान
इंटिग्रेटर की मदद से बढ़ाया या बदला जा सकता है और बाद में,
टेस्ट रनर. यह तरीका, सभी Java इंट्रिन्सिक टाइप के साथ-साथ, इंट्रिन्सिक टाइप के किसी भी Map
या Collection
इंस्टेंस के लिए काम करता है.
ध्यान दें: विकल्प को हैंडल करने का तरीका, सिर्फ़ क्लास के लिए काम करता है किसी एक नियम को लागू करना ऐसे इंटरफ़ेस जो टेस्ट लाइफ़साइकल में शामिल होते हैं. साथ ही, सिर्फ़ तब, जब वह क्लास लाइफ़साइकल मशीन की मदद से तुरंत ट्रिगर किया जा सकता है.
डेवलपर
शुरू करने के लिए, डेवलपर किसी सदस्य को
@Option
एनोटेशन. अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
वे कम से कम name
और description
वैल्यू तय करते हैं, जो
उस विकल्प से जुड़े आर्ग्युमेंट का नाम और
TF कंसोल को तब चलाएगा, जब --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 console के ज़रिए इन कॉन्फ़िगरेशन पॉइंट का ऐक्सेस होता है.
सबसे पहले, वे एक निर्देश (यानी, एक कॉन्फ़िगरेशन और उसके सभी तर्क)
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]
. साथ ही, सिंटैक्स --no-[option-name]
का इस्तेमाल करके, false
पर सेट किया जा सकता है.