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

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

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

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

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


当前回答

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

其他回答

不恰当的共享装置——蒂姆·奥廷格 测试夹具中的几个测试用例甚至不使用或不需要设置/拆卸。部分原因是开发人员惰性地创建了一个新的测试夹具…向堆中添加一个测试用例更容易

闪烁测试(来源:Romilly Cocking)

一个测试只是偶尔失败,而不是在特定的时间,通常是由于测试中的竞争条件。通常在测试异步的东西时发生,比如JMS。

可能是“等着瞧”反模式和“潜伏者”反模式的超级设置。

构建失败了,那就再运行一次构建吧。——匿名开发者

当我看到一些闪烁的gui时,我才会相信 一种不健康的执着/痴迷于通过图形用户界面测试应用程序,就像一个真正的用户一样

通过GUI测试业务规则 是一种可怕的结合形式。如果 您编写了数千个测试 然后改变你的GUI, 成千上万的测试中断。 相反,只通过GUI测试GUI内容,并将 图形用户界面以虚拟系统代替 真正的系统,当你做这些测试的时候。 通过API测试业务规则 不涉及GUI。——鲍勃·马丁

“你必须明白眼见为实,但也要知道眼见为实。——丹尼斯·韦特利

肛门探测器

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

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

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


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

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

等着瞧

一种运行一些设置代码的测试,然后需要“等待”一段特定的时间,才能“看到”被测代码是否按预期运行。使用Thread.sleep()或等效的testMethod肯定是一个“等待和观察”测试。

通常,如果测试正在测试生成系统外部事件(如电子邮件、http请求或将文件写入磁盘)的代码,您可能会看到这种情况。

这样的测试也可能是一个本地英雄,因为当它在较慢的机器或过载的CI服务器上运行时,它将失败。

不要将“等待和观察”反模式与“睡眠者”混淆。