Es gibt viele Gründe. Eric Lippert hat viele Male angegeben, dass der Grund feature X
nicht in C # liegt, weil es einfach nicht in ihrem Budget ist. Sprachdesigner haben weder unendlich viel Zeit noch Geld, um Dinge zu implementieren, und mit jeder neuen Funktion sind Wartungskosten verbunden. Die Sprache so klein wie möglich zu halten, ist nicht nur für die Sprachdesigner einfacher - es ist auch für jeden einfacher, alternative Implementierungen und Tools (z. B. IDEs) zu schreiben Portabilität kostenlos. Wenn Unit-Tests als Bibliothek implementiert werden, müssen Sie sie nur einmal schreiben, und sie funktionieren bei jeder konformen Implementierung der Sprache.
Es ist erwähnenswert, dass D Unterstützung auf Syntaxebene für Komponententests bietet . Ich weiß nicht, warum sie sich dazu entschlossen haben, dies zu tun, aber es ist erwähnenswert, dass D eine "Programmiersprache für Systeme auf hohem Niveau" sein soll. Die Designer wollten, dass es für die Art von unsicherem, einfachem Code, für den C ++ traditionell verwendet wurde, brauchbar ist, und ein Fehler in unsicherem Code ist unglaublich kostspielig - undefiniertes Verhalten. Ich nehme an, es hat für sie Sinn gemacht, zusätzliche Anstrengungen zu unternehmen, um zu überprüfen, ob ein unsicherer Code funktioniert. Beispielsweise können Sie erzwingen, dass nur bestimmte vertrauenswürdige Module unsichere Vorgänge wie ungeprüfte Arrayzugriffe oder Zeigerarithmetik ausführen können.
Die schnelle Entwicklung war auch für sie ein wichtiges Anliegen, sodass D-Code so schnell kompiliert werden konnte, dass er als Skriptsprache verwendet werden konnte. Backeinheitentests direkt in die Sprache, sodass Sie Ihre Tests ausführen können, indem Sie einfach ein zusätzliches Flag an den Compiler übergeben.
Ich denke jedoch, dass eine großartige Unit-Testing-Bibliothek viel mehr kann, als nur einige Methoden zu finden und auszuführen. Nehmen Sie zum Beispiel Haskells QuickCheck , mit dem Sie Dinge wie "für alle x und y f (x, y) == f (y, x)
" testen können . QuickCheck ist besser als Unit-Test- Generator zu bezeichnen und ermöglicht das Testen von Dingen auf einer höheren Ebene als "Für diesen Eingang erwarte ich diesen Ausgang". QuickCheck und Linq unterscheiden sich nicht sonderlich - sie sind beide domänenspezifische Sprachen. Anstatt die Unterstützung von Unit-Tests auf eine Sprache zu beschränken, sollten Sie die Funktionen hinzufügen, die erforderlich sind, um DSLs praktisch zu machen. Sie werden nicht nur Unit-Tests erhalten, sondern auch eine bessere Sprache.