Kiểm định mức đơn vị

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.

Thực hiện kiểm định

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.

Các mã chặn 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.

Mức phủ của mã kiểm định

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);
}

Nâng cao

rdmd playground.d