ऑप्शन हैंडलिंग ट्रेड फेडरेशन के मॉड्यूलर दृष्टिकोण के केंद्र में है। विशेष रूप से, विकल्प वह तंत्र है जिसके द्वारा डेवलपर, इंटीग्रेटर और टेस्ट रनर एक-दूसरे के काम की नकल किए बिना एक साथ काम कर सकते हैं। सीधे शब्दों में कहें, विकल्प प्रबंधन के हमारे कार्यान्वयन से डेवलपर को जावा वर्ग के सदस्य को विन्यास योग्य के रूप में चिह्नित करने की अनुमति मिलती है, जिस बिंदु पर उस सदस्य के मूल्य को इंटीग्रेटर द्वारा संवर्धित या ओवरराइड किया जा सकता है, और बाद में टेस्ट रनर द्वारा संवर्धित या ओवरराइड किया जा सकता है। यह तंत्र सभी जावा आंतरिक प्रकारों के साथ-साथ किसी भी Map
s या Collection
s के आंतरिक प्रकारों के लिए काम करता है।
नोट: ऑप्शन-हैंडलिंग मैकेनिज्म केवल टेस्ट लाइफसाइकिल में शामिल इंटरफेस में से किसी एक को लागू करने वाली कक्षाओं के लिए काम करता है, और केवल तभी जब उस क्लास को लाइफसाइकिल मशीनरी द्वारा इंस्टेंट किया जाता है।
डेवलपर
शुरू करने के लिए, डेवलपर एक सदस्य को @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>
टेस्ट रनर
टेस्ट रनर के पास ट्रेड फेडरेशन कंसोल के माध्यम से इन कॉन्फ़िगरेशन बिंदुओं तक भी पहुंच है। सबसे पहले और सबसे महत्वपूर्ण, वे 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
--टाइमआउट 10 का परिणाम timeout
में 10 होगा।
अंतर्निहित कार्यान्वयन के रूप में List
या Collection
के मामले में, सभी मान कमांड लाइन पर निर्दिष्ट क्रम में संग्रहीत किए जाएंगे।
बूलियन विकल्प
बूलियन अंतर्निहित प्रकार के विकल्पों को विकल्प नाम को सीधे पास करके true
पर सेट किया जा सकता है, उदाहरण के लिए, --[option-name]
और सिंटैक्स --no-[option-name]
का उपयोग करके इसे false
पर सेट किया जा सकता है।