反模式:必须至少有两个关键元素来正式区分实际的反模式与简单的坏习惯、坏实践或坏想法:

一些重复的行为模式、过程或结构,最初看起来是有益的,但最终产生的坏结果多于有益的结果 一个重构的解决方案,清楚地记录,在实际实践中证明,并可重复。

为您在“野外”中见过太多次的TDD反模式投票。 James Carr的博客文章和testdrivendevelopment yahoogroup的相关讨论

如果你找到了一个“未命名的”…也要贴出来。请每个反模式一篇文章,让投票有意义。

我的既得利益是找到前n个子集,这样我就可以在不久的将来在午餐会上讨论它们。


当前回答

本地英雄

一个测试用例,它依赖于编写它的开发环境中特定的东西来运行。结果是测试通过了开发箱,但是当有人试图在其他地方运行它时失败了。

隐藏的依赖性

与本地英雄密切相关的单元测试,需要在测试运行之前填充一些现有数据。如果这些数据没有被填充,测试就会失败,并且几乎没有给开发人员留下它想要什么或为什么的提示……迫使他们挖掘大量的代码来找出它所使用的数据应该来自哪里。


令人遗憾的是,我们已经多次看到古老的.dll依赖于模糊而多样的.ini文件,这些文件在任何给定的生产系统上都是不同步的,更不用说在没有与负责这些dll的三个开发人员广泛协商的情况下在您的机器上存在。叹息。

其他回答

测试一切

我不敢相信直到现在还没有提到这一点,但是测试不应该打破单一责任原则。

我遇到过很多次这样的情况,破坏这个规则的测试从定义上来说是维护的噩梦。

的嘲弄 有时候嘲讽是件好事,而且很方便。但有时开发人员可能会迷失自我,在他们努力模拟没有测试的东西的过程中。在这种情况下,一个单元测试包含了如此多的模拟、存根和/或伪造,以至于被测试的系统根本就没有被测试,相反,从模拟返回的数据才是被测试的内容。

来源:James Carr的帖子。

搭便车/搭便车——詹姆斯·卡尔,蒂姆·奥廷格 与其编写一个新的测试用例方法来测试另一个/不同的特性/功能,不如在一个现有的测试用例中使用一个新的断言(及其相应的操作,例如来自AAA的Act步骤)。

蝴蝶

您必须测试一些包含随时变化的数据的东西,比如包含当前日期的结构,并且没有办法将结果固定为一个固定的值。糟糕的是,您根本不关心这个值。它只会使您的测试更加复杂,而不会增加任何价值。

它翅膀上的蝙蝠可以在世界的另一端引发飓风。——爱德华·洛伦兹《蝴蝶效应

布谷鸟——弗兰克·卡佛 一个单元测试,它与其他几个测试用例一起位于一个测试用例中,并享受与测试用例中的其他测试相同的(可能很长的)设置过程,但随后会从设置中丢弃部分或全部工件并创建自己的工件。 高级症状:不恰当地共享Fixture