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

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

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

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

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


当前回答

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

其他回答

线打击

乍一看,测试覆盖了所有内容,代码覆盖率工具也100%地证实了这一点,但实际上测试只击中了代码,没有任何输出分析。

coverage-vs-reachable-code

沉睡者,又名维苏威火山,尼克·佩洛

注定在未来某个特定时间和日期失败的测试。这通常是由于在测试使用Date或Calendar对象的代码时不正确的边界检查造成的。有时,如果在一天中非常特定的时间(如午夜)运行测试可能会失败。

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

这些代码早在2000年之前就已经被替换了——许多开发人员在1960年就被替换了

秘密捕手——弗兰克·卡弗 由于缺少断言,乍一看似乎没有进行任何测试的测试。但是“细节决定成败”。测试实际上依赖于要抛出的异常,并期望测试框架捕获异常并将其作为失败报告给用户。

[Test]
public void ShouldNotThrow()
{
   DoSomethingThatShouldNotThrowAnException();
}

图灵测试

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

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

肛门探测器

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

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

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


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

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