বিকল্প পরিচালনা ট্রেড ফেডারেশনের মডুলার পদ্ধতির কেন্দ্রবিন্দুতে রয়েছে। বিশেষ করে, বিকল্পগুলি হল এমন একটি প্রক্রিয়া যার মাধ্যমে ডেভেলপার, ইন্টিগ্রেটর এবং টেস্ট রানার একে অপরের কাজের নকল না করে একসাথে কাজ করতে পারে। সহজ কথায়, বিকল্প পরিচালনার আমাদের বাস্তবায়ন ডেভেলপারকে জাভা শ্রেণীর সদস্যকে কনফিগারযোগ্য হিসাবে চিহ্নিত করতে দেয়, এই সময়ে সেই সদস্যের মান ইন্টিগ্রেটর দ্বারা বৃদ্ধি বা ওভাররাইড করা যেতে পারে এবং পরবর্তীতে টেস্ট রানার দ্বারা পরিবর্ধিত বা ওভাররাইড করা যেতে পারে। এই প্রক্রিয়াটি সমস্ত জাভা অভ্যন্তরীণ প্রকারের জন্য কাজ করে, সেইসাথে অভ্যন্তরীণ প্রকারের যে কোনও Map
বা Collection
উদাহরণগুলির জন্য।
দ্রষ্টব্য: অপশন-হ্যান্ডলিং মেকানিজম শুধুমাত্র সেই ক্লাসের জন্য কাজ করে যা টেস্ট লাইফসাইকেলে অন্তর্ভূক্ত ইন্টারফেসের একটি বাস্তবায়ন করে এবং শুধুমাত্র তখনই যখন সেই ক্লাসটি লাইফসাইকেল মেশিনারি দ্বারা ইনস্ট্যান্ট করা হয়।
বিকাশকারী
শুরু করতে, ডেভেলপার একজন সদস্যকে @Option
টীকা দিয়ে চিহ্নিত করে। তারা name
এবং description
মানগুলি নির্দিষ্ট করে (সর্বনিম্ন) যা সেই বিকল্পের সাথে যুক্ত আর্গুমেন্টের নাম উল্লেখ করে এবং যে বিবরণটি TF কনসোলে প্রদর্শিত হয় যখন কমান্ডটি --help
বা --help-all
দিয়ে চালানো হয়।
একটি উদাহরণ হিসাবে, ধরা যাক আমরা একটি কার্যকরী ফোন পরীক্ষা তৈরি করতে চাই যা বিভিন্ন ধরণের ফোন নম্বর ডায়াল করে এবং এটি সংযোগ করার পরে প্রতিটি নম্বর থেকে DTMF টোনের একটি ক্রম পাওয়ার প্রত্যাশা করে।
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
ক্ষেত্রে কিছু ধরণের ফিল্টারিং ডিফল্ট সেট আপ করার বা সম্পাদন করার একটি সহজ উপায় প্রদান করে, যা অন্যথায় সংযুক্ত করা হয়- শুধুমাত্র
ইন্টিগ্রেটর
ইন্টিগ্রেটর কনফিগারেশনের জগতে কাজ করে, যা XML এ লেখা হয়। কনফিগার ফরম্যাট ইন্টিগ্রেটরকে যেকোনো @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
।
অন্তর্নিহিত বাস্তবায়ন হিসাবে একটি List
বা Collection
ক্ষেত্রে, কমান্ড লাইনে নির্দিষ্ট ক্রমে সমস্ত মান সংরক্ষণ করা হয়।
বুলিয়ান বিকল্প
বুলিয়ান অন্তর্নিহিত প্রকারের বিকল্পগুলি সরাসরি বিকল্পের নাম পাস করে true
সেট করা যেতে পারে, উদাহরণস্বরূপ, --[option-name]
এবং সিনট্যাক্স --no-[option-name]
ব্যবহার করে false
সেট করা যেতে পারে।