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

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

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

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

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


当前回答

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

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

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

其他回答

以铁链锁住一群做苦工的囚犯

必须以特定顺序运行的几个测试,即一个测试改变了系统的全局状态(全局变量,数据库中的数据),而下一个测试依赖于它。

您经常在数据库测试中看到这种情况。测试不会在teardown()中执行回滚,而是将更改提交给数据库。另一个常见的原因是对全局状态的更改没有包装在try/finally块中,如果测试失败,这些块将被清理。

检查员 为了实现100%的代码覆盖率而违反封装的单元测试,但是它非常了解对象中正在发生的事情,以至于任何重构的尝试都将破坏现有的测试,并要求在单元测试中反映任何更改。


“我如何测试我的成员变量而不使它们为公共…”只是为了单元测试?”

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

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

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

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

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

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

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

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