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

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

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

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

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


当前回答

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

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

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

其他回答

慢戳

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

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

的嘲弄 有时候嘲讽是件好事,而且很方便。但有时开发人员可能会迷失自我,在他们努力模拟没有测试的东西的过程中。在这种情况下,一个单元测试包含了如此多的模拟、存根和/或伪造,以至于被测试的系统根本就没有被测试,相反,从模拟返回的数据才是被测试的内容。

来源:James Carr的帖子。

死树

一个创建了存根,但实际上没有编写测试的测试。

实际上,我在我们的产品代码中看到过这种情况:

class TD_SomeClass {
  public void testAdd() {
    assertEquals(1+1, 2);
  }
}

我都不知道该怎么想了。

蝴蝶

您必须测试一些包含随时变化的数据的东西,比如包含当前日期的结构,并且没有办法将结果固定为一个固定的值。糟糕的是,您根本不关心这个值。它只会使您的测试更加复杂,而不会增加任何价值。

它翅膀上的蝙蝠可以在世界的另一端引发飓风。——爱德华·洛伦兹《蝴蝶效应

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


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