如何解决在谈论单元测试时,“ DAMP not DRY”是什么意思?
| 我听说有人说单元测试(例如nUnit,jUnit,xUnit)应该是 潮湿不干燥 (例如,单元测试应包含\“阻尼代码\”而不是\“干燥代码\”) 他们在说什么?解决方法
这是平衡,而不是矛盾
DAMP和DRY并不矛盾,而是它们平衡了代码可维护性的两个不同方面。可维护的代码(易于更改的代码)是这里的最终目标。
DAMP(描述性和有意义的短语)提高了代码的可读性。
要维护代码,您首先需要了解代码。要理解它,您必须阅读它。考虑一下您花多少时间阅读代码。很多。
DAMP通过减少阅读和理解代码所需的时间来提高可维护性。
DRY(不要重复自己)可提高代码的正交性。
删除重复项可确保系统中的每个概念在代码中都有一个权威的表示。对单个业务概念的更改导致对代码的单个更改。 DRY通过将更改(风险)仅隔离到系统中那些必须更改的部分来提高可维护性。
那么,为什么重复测试在测试中更容易接受?
测试通常包含固有的重复,因为它们一次又一次地测试同一件事,仅使用稍微不同的输入值或设置代码进行测试。但是,与生产代码不同,此复制通常仅隔离到单个测试夹具/文件中的方案。因此,重复操作是最少且显而易见的,这意味着与其他类型的重复操作相比,它对项目造成的风险较小。
此外,消除这种重复会降低测试的可读性。以前在每个测试中重复的细节现在隐藏在某些新方法或类中。为了获得测试的全貌,您现在必须在精神上将所有这些部分放在一起。
因此,由于测试代码重复通常带来较少的风险,并提高了可读性,因此很容易看到它如何被接受。
原则上,在生产代码中偏爱DRY,在测试代码中偏爱DAMP。两者同等重要,但只要稍加一点智慧,您就可以平衡自己的利益。
,
DAMP-描述性和有意义的短语。
\“ DAMP not DRY \”重视代码重复使用的可读性。在测试用例中使用DAMP而不是DRY的想法是,测试应该易于理解,即使这意味着测试用例有时具有重复的代码。
另请参见单元测试中重复的代码是否容忍得多?对于这种观点的优点进行一些讨论。
它可能是Jay Fields在领域特定语言方面创造的。
, \“ DRY \”是\“不要重复自己\”
这是一个用来告诉人们编写可重复使用的代码的术语,这样您就不必一次又一次地编写类似的代码。
\“ DAMP \”是\“描述性和有意义的短语\”。
该术语旨在告诉您编写可以被看过它的人容易理解的代码。如果遵循此原则,则将具有描述性长的变量和函数名称等。
, Damp =“描述性和有意义的短语”-您的单元测试应该能够被“读取”:
可读性比
避免冗余代码。
从文章:
DAMP代表“描述性和有意义的短语”,与DRY相反,并不是说“一切看起来都像垃圾堆,无法阅读”,因为可读性比避免冗余代码更重要。
这是什么意思,在哪里使用?
DAMP主要在编写测试代码时适用。测试代码应该很容易理解,以至于可以接受一些冗余。
, DAMP代表“描述性和有意义的短语”,与DRY相反,并不是说“一切看起来都像垃圾堆,无法阅读”,因为可读性比避免冗余代码更重要。
http://codeshelter.wordpress.com/2011/04/07/dry-and-damp-principles-when-developing-and-unit-testing/
,这里已经有几个答案,但是我想添加另一个答案,因为我认为他们不一定尽力解释。
DRY(不要重复自己)的想法是,在您的应用程序代码中,您要避免冗余或保护性代码。如果您的代码需要多次执行某些操作,则应为其提供函数或类,而不要在多个位置重复类似的代码。
这是一个众所周知的编程概念。
DAMP(描述性和有意义的短语)适用于您的单元测试。这里的想法是,您的单元测试方法名称应长而具描述性-实际上是简短的句子,描述您要测试的内容。
例如:
testWhenIAddOneAndOneIShouldGetTwo() { .... }
当您读取这样的DAMP方法名称时,您应该完全了解测试编写者试图达到的目标,甚至不必阅读测试代码(尽管测试代码当然也可以使用这个概念,但使用冗长的变量名,等等)。
这是可能的,因为单元测试方法具有非常特定的输入和期望的输出,因此DAMP原理对其非常有效。主应用程序代码中的方法不太可能具体到足以保证这样的名称,特别是如果您已牢记DRY原理编写了该方法。
DAMP和DRY并不矛盾-它们涵盖了代码编写的不同方面-但是尽管如此,它们通常不一起使用,因为牢记DRY原理编写的方法将是通用的,并且不太可能适合高度特定的方法名称。因此,通常,如上所述,您的应用程序代码应为DRY,而单元测试代码为DAMP。
我希望这有助于更好地解释它。
, 我同意克里斯·爱德华兹(Chris Edwards)的观点,即您需要在两者之间取得平衡。要注意的另一件事是,如果试图删除重复项而最终在单元测试代码中添加了许多其他结构(即,将DRY发挥到极致),则可能会在其中引入错误。在这种情况下,您要么必须对单元测试进行单元测试,要么不对结构进行测试。
, 我不想在这里重复这些工作,但是您可以使用DAMP的测试,但可以受益于DRY。另一方面,DRY测试在某些情况下不能满足DAMP测试。
我已经写了有关DRY vs DAMP的博客,其中包括一些示例。
两种方法都不是您唯一的解决方案,有时DAMP会显得过大,有时则是非常好的选择。
作为一般规则,应应用三个规则。如果您第三次发现重复,可能值得研究编写DAMP样式测试,但是即使如此,并非所有重复都是不好的。上下文很重要。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。