การจัดการทางเลือกเป็นหัวใจของแนวทางโมดูลาร์ของสหพันธ์การค้า โดยเฉพาะอย่างยิ่ง ตัวเลือกคือกลไกที่ Developer, Integrator และ Test Runner สามารถทำงานร่วมกันได้โดยไม่ต้องทำซ้ำงานของกันและกัน พูดง่ายๆ ก็คือ การใช้งานตัวเลือกการจัดการของเราทำให้นักพัฒนาสามารถทำเครื่องหมายว่าสมาชิกคลาส Java นั้นสามารถกำหนดค่าได้ ซึ่ง ณ จุดนั้น ค่าของสมาชิกนั้นอาจถูกเสริมหรือแทนที่โดย Integrator และอาจเพิ่มหรือแทนที่โดย Test Runner ในภายหลัง กลไกนี้ใช้ได้กับ Java Intrinsic Types ทุกประเภท เช่นเดียวกับ Map
s หรือ Collection
ของ Intrinsic types
หมายเหตุ: กลไกการจัดการตัวเลือกใช้งานได้เฉพาะกับคลาสที่ใช้อินเทอร์เฟซอย่างใดอย่างหนึ่งที่รวมอยู่ใน Test Lifecycle และเฉพาะเมื่อคลาสนั้น สร้างอินสแตนซ์ โดยเครื่องจักรวงจรชีวิต
นักพัฒนา
ในการเริ่มต้น นักพัฒนาซอฟต์แวร์ทำเครื่องหมายสมาชิกด้วยคำอธิบายประกอบ @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
ซึ่งจะถูกผนวก - เท่านั้น.
Integrator
Integrator ทำงานในโลกของ Configurations ซึ่งเขียนด้วย XML รูปแบบการกำหนดค่าช่วยให้ Integrator สามารถตั้งค่า (หรือผนวก) ค่าสำหรับฟิลด์ @Option
ใดๆ ตัวอย่างเช่น สมมติว่า Integrator ต้องการกำหนดการทดสอบที่มีเวลาแฝงต่ำกว่าซึ่งเรียกหมายเลขเริ่มต้น เช่นเดียวกับการทดสอบระยะยาวที่เรียกใช้ตัวเลขต่างๆ พวกเขาสามารถสร้างคู่ของการกำหนดค่าที่อาจมีลักษณะดังนี้:
<?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>
นักวิ่งทดสอบ
นักวิ่งทดสอบยังมีสิทธิ์เข้าถึงจุดกำหนดค่าเหล่านี้ผ่านคอนโซลของสหพันธ์การค้า ก่อนอื่นพวกเขาจะเรียกใช้คำสั่ง (นั่นคือ config และอาร์กิวเมนต์ทั้งหมด) ด้วย run command <name>
คำสั่ง (หรือ run <name>
สั้น ๆ ว่า <name>) นอกจากนั้น ยังสามารถระบุรายการอาร์กิวเมนต์ใดๆ ที่เป็นส่วนหนึ่งของคำสั่ง ซึ่งอาจแทนที่หรือผนวกฟิลด์ที่ระบุโดย Lifecycle Objects ภายในการกำหนดค่าแต่ละรายการ
ในการรันการทดสอบเวลาแฝงต่ำด้วย 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]