Các phép thử (kiểm định) là cách hay để đảm bảo chương trình ổn định, không lỗi. Các phép thử mức đơn vị có thể xem như tài liệu trực quan, và cho phép lập trình viên thay đổi mã nguồn mà không làm thay đổi tính năng của hàm hay chương trình.
Trong D
có hỗ trợ sẵn từ khóa unittest
để tạo khối các phép thử mức đơn vị;
các khối này có thể để ở bất kỳ đâu trong một mô-đun D.
// Khối mã kiểm định mức đơn vị
unittest
{
assert(myAbs(-1) == 1);
assert(myAbs(1) == 1);
}
Bằng cách này hiển nhiên tư duy phát triển với động cơ kiểm định (Test-Driven Development) được áp dụng.
Các khối unittest
có thể gồm bất kỳ mã nguồn nào, và chúng được biên dịch
và thi hành khi cờ -unittest
được trình biên dịch DMD
đón nhận.
Khi dùng dub
, các mã kiểm định được thi hành với dub test
.
assert
Thường các khối mã unittest
gồm các biểu thức chặn assert
cho các
tính năng khác nhau của hàm. Khối mã kiểm định thường được viết gần với
định nghĩa của hàm, và có thể nằm bên trong định nghĩa của lớp hay kiểu ghép.
Phép đo thông dụng để biết một ứng dụng được kiểm định tới mức nào,
là dùng chỉ số code coverage (độ phủ của mã kiểm định).
Đó là tỉ lệ giữa số dòng mã được thi hành (lúc chạy kiểm định)
so với tổng số dòng mã của hàm hay ứng dụng.
Trình biên dịch DMD có thể phát sinh thông tin này khi
bạn gửi đến nó cờ -cov
; thông tin thông kê cho từng mô-đun được sinh
ra trong tập tin .lst
tương ứng.
Vì trình biên dịch có thể nội suy các thuộc tính của mã mẫu, nên trong D bạn thường nên viết thêm các nhãn cho mã kiểm định để chắc chắn một số ràng buộc xảy ra với mã kiểm định.
@safe @nogc nothrow pure unittest
{
assert(myAbs() == 1);
}