原因很多。埃里克·利珀特(Eric Lippert)多次指出,feature X
不在C#中的原因是因为这不在他们的预算范围内。语言设计人员没有无限的时间或金钱来实现事物,并且每个新功能都具有与之相关的维护成本。保持尽可能小的语言不仅对语言设计人员来说容易,而且对编写替代实现和工具(例如IDE)的人也更容易。免费的可移植性。如果单元测试是作为库实现的,则只需编写一次即可,并且可以在该语言的任何符合要求的实现中使用。
值得注意的是D 确实对单元测试提供了语法级别的支持。我不知道为什么他们决定把它扔进去,但是值得注意的是D意味着它是一种“高级系统编程语言”。设计人员希望它对于传统上使用C ++的一种不安全的低级代码是可行的,并且不安全的代码中的错误的代价是难以置信的高成本-未定义的行为。因此,我认为对他们来说,在可以帮助您验证某些不安全代码有效的任何事情上付出更多的努力是有意义的。例如,您可以强制只有某些受信任的模块才能执行不安全的操作,例如未经检查的数组访问或指针算术。
快速开发也是他们的首要任务,以至于他们将D代码作为足够快的编译速度以使其可用作脚本语言的设计目标。烘焙单元测试直接融入了语言中,因此您只需向编译器传递一个额外的标志就可以运行测试。
但是,我认为一个出色的单元测试库所要做的不只是找到一些方法并运行它们。以Haskell的QuickCheck为例,它可以测试诸如“对于所有x和y f (x, y) == f (y, x)
”之类的东西。QuickCheck被更好地描述为一个单元测试生成器,它使您可以在比“对于此输入,我期望此输出”更高的级别上进行测试。QuickCheck和Linq并没有什么不同-它们都是特定于域的语言。因此,为什么不增加对语言的单元测试支持,为什么不添加使DSL实用化所需的功能呢?您将不仅获得单元测试的结果,还获得了更好的语言。