execution)
Test harness:
Khái niệm test harness đƣợc định nghĩa trong tài liệu [4]: “Một test harness là mã mà cho phép một test runner thực thi một thực hiện”. Một bản khai thác kiểm thử phải đƣợc viết cho mỗi thực hiện.
Cách viết và cách làm việc của bản khai thác kiểm thử là: Không gian tên đƣợc viết giống nhƣ không gian tên của thực hiện. Bản khai thác kiểm thử thực hiện giao diện IStepper của thƣ viện mô hình, nên một bản khai thác kiểm thử thƣờng đƣợc gọi là một stepper, nó “bƣớc – steps”qua thực hiện thông qua các hành động của mỗi ca kiểm thử. Để thực hiện giao diện IStepper, hai phƣơng thức Reset và DoAction phải đƣợc viết. Stepper cũng phải cung cấp một phƣơng thức factory trả về đối tƣợng stepper. Phƣơng thức Reset thực hiện sau mỗi ca kiểm thử để thiết lập lại Impl về trạng thái khởi tạo của nó. Phƣơng thức DoAction là trọng tâm của bản khai thác kiểm thử, nó gọi các hành động có thể điều khiển của thực hiện; giám sát các hành động có thể quan sát đƣợc; thu thập kết quả đầu ra từ implementation và kiểm tra implementation
đối với mô hình.
namespace [Tên implementation] {
public class Stepper: IStepper
{
public CompoundTerm DoAction(CompoundTerm action) {
switch (action.Name) {
case("Tests"): return null; ...
return null; ...
default: throw new Exception("Unexpected action " + action);
} }
public void Reset() {
... }
public static IStepper Create() {
return new Stepper(); }
}
Mã DoAction cũng có thể đọc các biến trạng thái thực hiện, và bao gồm các giá trị của chúng trong giới hạn cho hành động kết thúc. Để sử dụng thông tin này, phƣơng thức hành động tƣơng ứng của mô hình sẽ phải trả về các giá trị của biến trạng thái mô hình trong các tham số out.
Test runner chỉ ra một thất bại kiểm thử nếu hành động kết thúc đƣợc trả về bởi
DoAction không phù hợp với hành động kết thúc đƣợc tạo bởi MP (nếu thực hiện trả về một giá trị khác so với MP đã tính). Đó là cách MP hoạt động nhƣ một phán xét kiểm thử (test oracle). Test runner cũng chỉ ra một thất bại kiểm thử nếu DoAction
ném ra một ngoại lệ (throws an exception). Vì lý do này, DoAction thƣờng không xử lý các ngoại lệ bị ném bởi thực hiện.
Biên dịch stepper tới một thƣ viện và tham chiếu thực hiện vào quá trình biên dịch:
csc /t:library /out:Stepper.dll ˆ
/r:Tên lớp thực hiện.dll /r:Tên lớp thực hiện.dll ˆ /r:"%DEVPATH%\NModel.dll" ˆ
Stepper.cs
Test execution:
Để thực hiện một bộ kiểm thử, gọi công cụ test runner ct, đặt tên cho stepper và test suite (bộ kiểm thử). Tên MP không cần phải đặt vì tất cả các thông tin cần thiết từ MP đã đƣợc biểu diễn trong một bộ kiểm thử. Lệnh này thực hiện một bộ kiểm thử đã tạo ra từ MP hợp đồng:
ct /r:Stepper.dll
/iut:[Ten_Solution].Stepper.Create