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

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

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

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

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


当前回答

过度设置——詹姆斯·卡尔 一个甚至开始测试都需要巨大设置的测试。有时要用几百行代码来为一个测试准备环境,涉及到几个对象,由于所有设置的“噪音”,这可能很难真正确定测试的是什么。(来源:James Carr的帖子)

其他回答

图灵测试

由一些昂贵的工具自动生成的测试用例,该工具使用一些过于聪明的数据流分析,从被测类中收集了许多断言。让开发人员产生一种错误的信心,认为他们的代码经过了良好的测试,使他们免于设计和维护高质量测试的责任。如果机器可以为你编写测试,为什么它不能抽出手指来自己编写应用程序呢!

你好笨。——世界上最聪明的电脑卖给新学徒(出自Amiga漫画)。

分身

为了测试某些东西,您必须将测试中的部分代码复制到具有相同名称和包的新类中,并且必须使用类路径魔法或自定义类加载器来确保它首先是可见的(这样您的副本就会被拾取)。

此模式表明您无法从测试中控制隐藏依赖项的不健康数量。

我看着他的脸……我的脸!它就像一面镜子,但让我的血液凝固。

环境破坏者

一个用于各种“需求”的“单元”测试开始溢出到其环境中,使用和设置环境变量/端口。同时运行两个这样的测试会导致“端口不可用”异常等。

这些测试将是断断续续的,开发人员会说“再运行一次”之类的话。

我看到的一个解决方案是随机选择一个端口号来使用。这降低了冲突的可能性,但显然不能解决问题。因此,如果可以,总是模拟代码,这样它就不会分配不可共享资源。

本地英雄

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

隐藏的依赖性

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


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

无名的测试——尼克·佩洛

添加到错误跟踪器中以重现特定错误的测试,并且其作者认为不需要有自己的名称。不是增强现有的、缺乏的测试,而是创建一个名为testForBUG123的新测试。

两年后,当测试失败时,您可能需要首先尝试在错误跟踪器中找到bug -123,以弄清楚测试的意图。