拉菲1娱乐

拉菲1娱乐


文化传媒

拉菲1娱乐 > 文化传媒 > 为什么不使用代码内嵌编写测试?

为什么不使用代码内嵌编写测试?

日期:2018-06-19 阅读 14

这个问答是每周发布的一系列帖子的一部分,这些帖子强调了技术爱好者遇到的常见问题,并由100多个问答站点组成的免费社区网络Stack Exchange的用户回答。Chris devereax最近一直在阅读Donald Knuth在上世纪70年代开发的“识字编程”这一创新(而且大部分是未使用的)编程方法。这让他想到了实施测试的新方法。写得好的测试,特别是BDD风格的规范,比散文更能解释代码的作用,他在问题中写道。此外,测试具有验证自身准确性的巨大优势。不过,Chris从未见过测试是用他们测试的代码内嵌编写的。为什么不呢?

请参阅此处的原始问题。

较大的文件,不太清楚的codeBaqueta答案( 63票) :

对于内嵌测试,我能想到的唯一优势是减少要编写的文件数量。对于现代人来说,这真的没什么大不了的。

但是,内嵌测试有许多明显的缺点:

这违反了关注点的分离。这可能是有争议的,但对我来说,测试功能与实现功能是不同的责任。您要么必须引入新的语言功能来区分测试/实现,要么冒着混淆两者界限的风险。更大的源文件更难处理:更难阅读、更难理解,你更有可能不得不处理源代码管理冲突。可以说,我觉得戴上你的测试者帽子会更加困难。如果您查看实现细节,您将更倾向于跳过实现某些测试。相关: 为什么识字编程不是主流?

不要去那里,女友斯蒂芬C回答( 29票) :

我能想到几个原因:

可读性。散布 real 代码和测试将使读取真实代码变得更加困难。代码膨胀。将 real code和测试代码混合到同一个文件/类中/无论什么可能导致更大的编译文件等。这对于绑定较晚的语言尤其重要。您可能不想让客户/客户看到您的测试代码。(我不喜欢这个原因...但是如果你在一个封闭的源代码项目上工作,测试代码无论如何也不可能帮助客户。)现在这些问题都有可能的解决办法。但在我看来,首先不去那里比较简单。

值得注意的是,在早期,Java程序员经常做这种事情;例如在类中包括主(…)方法,以便于测试。这个想法几乎完全消失了。使用某种测试框架单独实现测试是工业实践。

同样值得注意的是,识字编程( Knuth构想的)从未在软件工程行业流行过。

事物变化Caleb回答( 7票) :

出于许多同样的原因,你试图避免代码中类之间的紧密耦合,避免测试和代码之间不必要的耦合也是一个好主意。

创建:测试和代码可以由不同的人在不同的时间编写。

控制:如果使用测试来指定需求,您肯定希望它们受关于谁可以更改以及何时更改的不同规则的约束。

可重用性:如果将测试放在内联,则不能将它们与另一段代码一起使用。

想象一下,你有一大块代码可以正确地完成工作,但是在性能、可维护性等方面还有很多需要改进的地方。您决定用新代码和改进的代码替换代码。使用相同的测试集可以帮助您验证新代码产生与旧代码相同的结果。

可选择性:保持测试与代码分离,可以更容易地选择要运行的测试。

例如,您可能有一个仅与您当前正在处理的代码相关的小测试套件,以及一个测试整个项目的大测试套件。

这很少见,但你可以试试ittieTYT的答案( 4票) :

实际上,你可以把合同设计视为这样做。问题是大多数编程语言不允许你编写这样的代码。手工测试先决条件非常容易,但是在不改变代码编写方式的情况下,post条件是一个真正的挑战(一个巨大的负面IMO )。

迈克尔·费恩斯对此有一个介绍。这是他提到的许多提高代码质量的方法之一。

找到更多答案,或者把自己的答案留在原来的帖子里。在程序员处看到更多这样的问答,这是一个在堆栈交换中处理概念性编程问题的站点。当然,你可以随意登录,问问你自己的。