การจัดการตัวเลือกเป็นหัวใจสำคัญของแนวทางแบบโมดูลของสหพันธ์การค้า โดยเฉพาะอย่างยิ่ง ตัวเลือกเป็นกลไกที่นักพัฒนาแอป ผู้ผสานรวม และ Test Runner สามารถทำงานร่วมกันได้โดยไม่ต้องทำซ้ำงานของกันและกัน กล่าวโดยย่อ การติดตั้งใช้งานการจัดการตัวเลือกของเราช่วยให้นักพัฒนาซอฟต์แวร์สามารถทำเครื่องหมายสมาชิกคลาส Java ว่ากำหนดค่าได้ ซึ่งในจุดนี้ผู้ผสานรวมจะเพิ่มหรือลบล้างค่าของสมาชิกนั้นได้ และต่อมา Test Runner จะเพิ่มหรือลบล้างค่าได้ กลไกนี้ใช้ได้กับประเภทข้อมูลดั้งเดิมของ Java ทั้งหมด รวมถึงอินสแตนซ์ 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 }
นักพัฒนาแอปต้องทำเพียงเท่านี้เพื่อตั้งค่าการกำหนดค่า 2 จุดสำหรับการทดสอบนั้น
จากนั้นก็สามารถใช้ mWaitTime
และ mCalls
ได้ตามปกติ
โดยไม่ต้องสนใจว่ากำหนดค่าได้ เนื่องจากมีการตั้งค่าฟิลด์
@Option
หลังจากสร้างอินสแตนซ์ของคลาส แต่ก่อนที่จะเรียกใช้เมธอด
run
ซึ่งจะช่วยให้ผู้ใช้ตั้งค่าเริ่มต้นสำหรับ
หรือทำการกรองบางอย่างในฟิลด์ Map
และ Collection
ได้ง่าย ซึ่ง
มิฉะนั้นจะเพิ่มได้เท่านั้น
ผู้รวมบริการ
ผู้ผสานรวมจะทำงานในโลกของการกำหนดค่าซึ่งเขียนด้วย XML รูปแบบการกำหนดค่า
ช่วยให้ผู้ผสานรวมตั้งค่า (หรือต่อท้าย) ค่าสำหรับฟิลด์ @Option
ได้ ตัวอย่างเช่น
สมมติว่าผู้ผสานรวมต้องการกำหนดการทดสอบที่มีเวลาในการตอบสนองต่ำซึ่งเรียกหมายเลขเริ่มต้น
รวมถึงการทดสอบที่ใช้เวลานานซึ่งเรียกหมายเลขต่างๆ โดยอาจสร้างการกำหนดค่า 2 รายการ
ซึ่งอาจมีลักษณะดังนี้
<?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 Runner
นอกจากนี้ Test Runner ยังมีสิทธิ์เข้าถึงจุดกำหนดค่าเหล่านี้ผ่านคอนโซล Trade Federation ด้วย
ก่อนอื่น ผู้ใช้จะเรียกใช้คำสั่ง (ซึ่งก็คือการกำหนดค่าและอาร์กิวเมนต์ทั้งหมด) ด้วย
run command <name>
คำสั่ง (หรือ run <name>
แบบย่อ)
นอกจากนี้ ผู้ใช้ยังระบุรายการอาร์กิวเมนต์ใดก็ได้ซึ่งเป็นส่วนหนึ่งของคำสั่ง ซึ่งสามารถแทนที่หรือ
ต่อท้ายฟิลด์ที่ระบุโดยออบเจ็กต์วงจรภายในแต่ละการกำหนดค่า
หากต้องการเรียกใช้การทดสอบที่มีเวลาในการตอบสนองต่ำด้วยหมายเลขโทรศัพท์ many-numbers
หมายเลข เครื่องมือเรียกใช้การทดสอบ
จะดำเนินการดังนี้
tf> run low-latency.xml --call 111-111-1111 #*#*TEST1*#*# --call 222-222-2222 #*#*TEST2*#*#
หรือหากต้องการให้ได้ผลลัพธ์ที่คล้ายกันจากทิศทางตรงกันข้าม Test Runner อาจลดเวลา
รอสำหรับ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]