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

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

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

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

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


当前回答

慢戳

运行极其缓慢的单元测试。当开发人员开始测试时,他们有时间去洗手间,抽根烟,或者更糟的是,在一天结束回家之前开始测试。(来源:James Carr的帖子)

也就是那些不会像它们应该的那样频繁地运行的测试

其他回答

肛门探测器

一个必须使用疯狂的、非法的或其他不健康的方式来执行其任务的测试,例如:使用Java的setAccessible(true)读取私有字段或扩展一个类来访问受保护的字段/方法,或者必须将测试放在某个包中以访问包的全局字段/方法。

如果您看到这种模式,则说明测试中的类使用了过多的数据隐藏。

这与Inspector之间的区别在于,被测类甚至试图隐藏需要测试的内容。因此,您的目标不是实现100%的测试覆盖率,而是能够测试任何东西。想象一个只有私有字段的类,一个没有参数的run()方法,而且根本没有getter。在不违反规则的情况下,没有办法进行测试。


Michael Borgwardt评论:这并不是一个真正的测试反模式,它是一种实用主义,用于处理被测试代码中的缺陷。当然,最好是修复这些缺陷,但在第三方库的情况下,这可能是不可能的。

Aaron Digulla:我有点同意。也许这个条目真的更适合“JUnit HOWTO”wiki,而不是反模式。评论?

今天被这个咬了一口:

潮湿的地板上: 测试创建的数据被持久化到某个地方,但是测试完成后并不清理。这会导致测试(相同的测试,也可能是其他测试)在后续测试运行中失败。

在我们的例子中,测试在“temp”目录中留下了一个文件,该文件具有第一次运行测试的用户的权限。当不同的用户尝试在同一台机器上测试时:砰。在James Carr网站上的评论中,Joakim Ohlrogge将其称为“邋遢的工人”,这也是“慷慨的剩菜”的灵感来源之一。我更喜欢我的名字(不那么侮辱人,更熟悉)。

二等公民——测试代码不像生产代码那样容易重构,包含大量重复的代码,使得维护测试变得困难。

母鸡妈妈——弗兰克·卡弗 一个通用的设置,它所做的远远超过实际测试用例所需要的。例如,创建各种复杂的数据结构,其中填充了明显重要和唯一的值,而测试只断言存在或不存在某些东西。 高级症状:不恰当地共享Fixture

我不知道它能做什么…以防万一,我还是加进去了。——匿名开发者

本地英雄

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

隐藏的依赖性

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


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