การจัดการตัวเลือกเป็นหัวใจสำคัญของแนวทางแบบโมดูลของ Trade Federation โดยเฉพาะอย่างยิ่ง ตัวเลือกเป็นกลไกที่นักพัฒนาซอฟต์แวร์ ผู้ผสานรวม และ Test Runner สามารถทํางานร่วมกันได้โดยไม่ต้องทํางานซ้ำกัน พูดง่ายๆ คือการใช้การจัดการตัวเลือกของเราทำให้
นักพัฒนาซอฟต์แวร์เพื่อทำเครื่องหมายสมาชิกคลาส Java ว่าสามารถกำหนดค่าได้ ซึ่งทำให้ค่าของสมาชิกดังกล่าว
สามารถเสริมหรือลบล้างได้โดยผู้ผสานรวมระบบ และจะสามารถนำไปเสริมหรือลบล้างได้โดย
เครื่องมือดำเนินการทดสอบ กลไกนี้ใช้งานได้กับ JavaScript ทุกประเภท รวมถึง
ประเภทที่แท้จริง 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
ซึ่งเป็น
มิฉะนั้นจะใช้ "ต่อท้ายเท่านั้น"
ผู้รวมบริการ
โดย Integrator จะทำงานได้กับโลกแห่งการกำหนดค่า ซึ่งเขียนในรูปแบบ 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 ยังเข้าถึงจุดการกำหนดค่าเหล่านี้ผ่านคอนโซล Trade Federation ได้ด้วย
สิ่งแรกสุดคือเรียกใช้คําสั่ง (นั่นคือการกําหนดค่าและอาร์กิวเมนต์ทั้งหมด) ด้วยคำสั่ง 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]
และสามารถตั้งค่าเป็น false
ได้โดยใช้
ไวยากรณ์ --no-[option-name]