Có rất nhiều lý do. Eric Lippert đã tuyên bố nhiều lần rằng lý do feature X
không có trong C # là vì nó không nằm trong ngân sách của họ. Các nhà thiết kế ngôn ngữ không có thời gian vô hạn cũng như tiền để thực hiện mọi thứ và mỗi tính năng mới có chi phí bảo trì liên quan đến nó. Giữ ngôn ngữ càng nhỏ càng tốt, không chỉ dễ dàng hơn đối với các nhà thiết kế ngôn ngữ - mọi người cũng dễ dàng hơn khi viết các công cụ và triển khai thay thế (ví dụ IDE) Ngoài ra, khi một thứ gì đó được triển khai theo ngôn ngữ chứ không phải là một phần của ngôn ngữ tính di động miễn phí. Nếu kiểm thử đơn vị đang triển khai như một thư viện, bạn chỉ cần viết nó một lần và nó sẽ hoạt động trong bất kỳ triển khai ngôn ngữ phù hợp nào.
Điều đáng chú ý là D có hỗ trợ cấp cú pháp để kiểm tra đơn vị . Tôi không biết tại sao họ quyết định ném nó vào, nhưng đáng chú ý rằng D có nghĩa là một "ngôn ngữ lập trình hệ thống cấp cao". Các nhà thiết kế muốn nó khả thi đối với loại mã C ++ không an toàn, mức độ thấp thường được sử dụng và một lỗi trong mã không an toàn là rất tốn kém - hành vi không xác định. Vì vậy, tôi cho rằng việc họ dành nhiều nỗ lực hơn cho bất cứ điều gì giúp bạn xác minh rằng một số mã không an toàn có hiệu quả. Ví dụ, bạn có thể thực thi rằng chỉ những mô-đun đáng tin cậy nhất định mới có thể thực hiện các hoạt động không an toàn như truy cập mảng không được kiểm soát hoặc số học con trỏ.
Phát triển nhanh cũng là ưu tiên hàng đầu của họ, đến nỗi họ đã đặt mục tiêu thiết kế mà mã D biên dịch đủ nhanh để biến nó thành ngôn ngữ kịch bản. Đơn vị nướng thử nghiệm ngay ngôn ngữ để bạn có thể chạy thử nghiệm của mình bằng cách chuyển một cờ phụ cho trình biên dịch giúp với điều đó.
Tuy nhiên, tôi nghĩ rằng một thư viện thử nghiệm đơn vị tuyệt vời làm được nhiều việc hơn là chỉ tìm một số phương thức và chạy chúng. Lấy ví dụ QuickCheck của Haskell , cho phép bạn kiểm tra những thứ như "cho tất cả x và y f (x, y) == f (y, x)
". QuickCheck được mô tả tốt hơn dưới dạng trình tạo thử nghiệm đơn vị và cho phép bạn kiểm tra mọi thứ ở mức cao hơn "đối với đầu vào này, tôi đang mong đợi đầu ra này". QuickCheck và Linq không khác nhau nhiều - chúng đều là ngôn ngữ dành riêng cho tên miền. Vì vậy, thay vì hỗ trợ kiểm tra đơn vị hỗ trợ cho một ngôn ngữ, tại sao không thêm các tính năng cần thiết để làm cho DSL thực tế? Bạn sẽ kết thúc với không chỉ kiểm tra đơn vị, mà kết quả là một ngôn ngữ tốt hơn.