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

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

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

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

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


当前回答

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


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

其他回答

慢戳

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

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

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


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

等着瞧

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

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

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

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

巨大的

一个单元测试,尽管它是有效地测试被测对象,但它可以跨越数千行,并包含许多许多测试用例。这可以作为一个指示器,表明测试中的系统是一个上帝对象(James Carr的帖子)。

对于这种情况,一个明确的迹象是测试跨越了不止几行代码。通常,测试是如此复杂,以至于它开始包含自己的错误或不可靠的行为。

分身

为了测试某些东西,您必须将测试中的部分代码复制到具有相同名称和包的新类中,并且必须使用类路径魔法或自定义类加载器来确保它首先是可见的(这样您的副本就会被拾取)。

此模式表明您无法从测试中控制隐藏依赖项的不健康数量。

我看着他的脸……我的脸!它就像一面镜子,但让我的血液凝固。