Ada banyak alasan. Eric Lippert telah berkali-kali menyatakan bahwa alasannya feature X
tidak ada dalam C # adalah karena itu tidak sesuai dengan anggaran mereka. Perancang bahasa tidak memiliki waktu atau uang yang tidak terbatas untuk mengimplementasikan berbagai hal, dan setiap fitur baru memiliki biaya perawatan yang terkait dengannya. Menjaga bahasa sekecil mungkin tidak hanya lebih mudah bagi perancang bahasa - itu juga lebih mudah bagi siapa pun yang menulis implementasi dan alat alternatif (misalnya IDE). Selain itu, ketika sesuatu diimplementasikan dalam hal bahasa daripada bagian dari itu, Anda mendapatkan portabilitas gratis. Jika pengujian unit diterapkan sebagai pustaka, Anda hanya perlu menulisnya sekali dan itu akan berhasil dalam implementasi bahasa yang sesuai.
Perlu dicatat bahwa D memang memiliki dukungan tingkat sintaks untuk pengujian unit . Saya tidak tahu mengapa mereka memutuskan untuk melemparkan itu, tetapi perlu dicatat bahwa D dimaksudkan untuk menjadi "bahasa pemrograman sistem tingkat tinggi". Para perancang menginginkannya menjadi layak untuk jenis kode C ++ tingkat rendah yang tidak aman, secara tradisional telah digunakan, dan kesalahan dalam kode tidak aman sangat mahal - perilaku yang tidak terdefinisi. Jadi saya kira masuk akal bagi mereka untuk melakukan upaya ekstra pada apa pun yang membantu Anda memverifikasi bahwa beberapa kode tidak aman berfungsi. Misalnya, Anda dapat memastikan bahwa hanya modul tepercaya tertentu yang dapat melakukan operasi yang tidak aman seperti akses larik yang tidak dicentang atau aritmatika penunjuk.
Pengembangan cepat juga merupakan prioritas bagi mereka, sangat banyak sehingga mereka menjadikannya tujuan desain yang dikompilasi kode D cukup cepat untuk membuatnya dapat digunakan sebagai bahasa scripting. Memanggang unit menguji langsung ke dalam bahasa sehingga Anda dapat menjalankan tes Anda hanya dengan memberikan bendera tambahan ke kompiler membantu dengan itu.
Namun, saya pikir perpustakaan pengujian unit hebat tidak lebih dari sekedar menemukan beberapa metode dan menjalankannya. Ambil QuickCheck Haskell sebagai contoh, yang memungkinkan Anda menguji hal-hal seperti "untuk semua x dan y, f (x, y) == f (y, x)
". QuickCheck lebih baik dideskripsikan sebagai unit test generator dan memungkinkan Anda untuk menguji hal-hal pada tingkat yang lebih tinggi daripada "untuk input ini, saya mengharapkan output ini". QuickCheck dan Linq tidak jauh berbeda - keduanya merupakan bahasa khusus domain. Jadi, alih-alih mengandalkan dukungan pengujian unit ke bahasa, mengapa tidak menambahkan fitur yang diperlukan untuk membuat DSL praktis? Anda akan berakhir dengan tidak hanya pengujian unit, tetapi bahasa yang lebih baik sebagai hasilnya.