Việc xử lý lựa chọn là trọng tâm trong phương pháp theo mô-đun của Trade Federation. Cụ thể, các lựa chọn là cơ chế mà nhà phát triển, Trình tích hợp và Trình chạy kiểm thử có thể phối hợp với nhau mà không cần phải trùng lặp công việc của nhau. Nói một cách đơn giản, việc triển khai tính năng xử lý lựa chọn của chúng tôi cho phép nhà phát triển đánh dấu một thành phần lớp Java là có thể định cấu hình. Tại thời điểm đó, giá trị của thành phần đó có thể được Bộ tích hợp tăng cường hoặc ghi đè, sau đó có thể được Trình chạy kiểm thử tăng cường hoặc ghi đè. Cơ chế này hoạt động cho tất cả các loại nội tại của Java, cũng như cho mọi thực thể Map
hoặc Collection
của các loại nội tại.
Lưu ý: Cơ chế xử lý lựa chọn chỉ hoạt động đối với các lớp triển khai một trong các giao diện có trong Vòng đời kiểm thử và chỉ khi lớp đó được cơ chế vòng đời khởi tạo.
Nhà phát triển
Để bắt đầu, nhà phát triển đánh dấu một thành viên bằng chú thích @Option
.
Chúng chỉ định (tối thiểu) các giá trị name
và description
. Các giá trị này chỉ định tên đối số được liên kết với Lựa chọn đó và nội dung mô tả xuất hiện trên bảng điều khiển TF khi lệnh được chạy bằng --help
hoặc --help-all
.
Ví dụ: giả sử chúng ta muốn tạo một kiểm thử điện thoại chức năng quay số nhiều số điện thoại và dự kiến nhận được một chuỗi âm DTMF từ mỗi số sau khi kết nối.
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 }
Đó là tất cả những gì nhà phát triển cần làm để thiết lập 2 điểm cấu hình cho kiểm thử đó. Sau đó, họ có thể tắt và sử dụng mWaitTime
và mCalls
như bình thường mà không cần chú ý nhiều đến việc chúng có thể định cấu hình. Vì các trường @Option
được đặt sau khi lớp được khởi tạo, nhưng trước khi phương thức run
được gọi, nên điều này giúp người triển khai dễ dàng thiết lập giá trị mặc định hoặc thực hiện một số loại hoạt động lọc trên các trường Map
và Collection
(nếu không thì chỉ có thể thêm vào).
Nhà tích hợp
Trình tích hợp hoạt động trong thế giới cấu hình, được viết bằng XML. Định dạng cấu hình cho phép Trình tích hợp đặt (hoặc thêm) một giá trị cho bất kỳ trường @Option
nào. Ví dụ: giả sử Trình tích hợp muốn xác định một kiểm thử có độ trễ thấp, gọi số mặc định, cũng như một kiểm thử chạy trong thời gian dài, gọi nhiều số. Họ có thể tạo một cặp cấu hình có dạng như sau:
<?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>
Trình chạy kiểm thử
Trình chạy kiểm thử cũng có quyền truy cập vào các điểm cấu hình này thông qua bảng điều khiển Trade Federation.
Trước hết, họ chạy một lệnh (tức là một cấu hình và tất cả các đối số của lệnh đó) bằng chỉ dẫn run command <name>
(hoặc run <name>
cho ngắn gọn).
Ngoài ra, họ có thể chỉ định mọi danh sách đối số là một phần của lệnh, có thể thay thế hoặc thêm vào các trường do đối tượng vòng đời chỉ định trong mỗi cấu hình.
Để chạy kiểm thử có độ trễ thấp bằng số điện thoại many-numbers
, Trình chạy kiểm thử có thể thực thi:
tf> run low-latency.xml --call 111-111-1111 #*#*TEST1*#*# --call 222-222-2222 #*#*TEST2*#*#
Hoặc để có được hiệu ứng tương tự từ hướng ngược lại, Trình chạy kiểm thử có thể giảm thời gian chờ cho kiểm thử many-numbers
:
tf> run many-numbers.xml --timeout 5000
Thứ tự lựa chọn
Bạn có thể nhận thấy rằng việc triển khai cơ bản của lựa chọn call
là Map
, vì vậy, khi bạn lặp lại --call
trên dòng lệnh, tất cả các lựa chọn này sẽ được lưu trữ.
Lựa chọn timeout
(có chế độ triển khai cơ bản là long
) chỉ có thể lưu trữ một giá trị. Vì vậy, chỉ giá trị được chỉ định gần đây nhất mới được lưu trữ.
--timeout 5 --timeout 10
kết quả trong timeout
chứa 10.
Trong trường hợp List
hoặc Collection
là cách triển khai cơ bản, tất cả các giá trị sẽ được lưu trữ theo thứ tự được chỉ định trên dòng lệnh.
Các lựa chọn boolean
Bạn có thể đặt các lựa chọn của loại cơ bản boolean thành true
bằng cách truyền trực tiếp tên lựa chọn, ví dụ: --[option-name]
và có thể đặt thành false
bằng cú pháp --no-[option-name]
.