鉴于TDD最近的趋势等,"经理"对象总是一个坏主意?

Gre*_*ley 0 tdd singleton unit-testing

我为各种平台编写应用程序,但主要是OS X和Windows.在这两方面,我受到了测试驱动开发(TDD),SOLID等最近趋势的影响.我发现大多数都是很好的建议.我发现如果我有很好的测试覆盖率,我更有可能根据需要进行重构,因为我更有信心我会在测试中发现重构的任何副作用.

无论如何,所有这一切都引出了我的问题:"经理"单身总是一个坏主意吗?我正在编写一个Cocoa应用程序,它必须处理队列中的大量QuickTime文件.应用程序中只能有一个队列,并且应该可以访问应用程序的多个部分,以便它们可以将项目添加到队列中.我发现最简单的方法是使用单例.现在,我已经注意以可测试的方式编写这个单例,因此TDD不是问题.

在这种情况下,我会用什么替代单身人士?还有哪些其他设计模式可以进行单元测试?(请注意,此问题应视为与语言无关.这是一般的OO和TDD问题.)

jpo*_*poh 6

单身人士对可测试性不利的原因是因为它的行为非常像全球性(在这里阅读Misko Hevery关于这个主题的优秀文章).因此,由于您无法通过测试(即单例类)控制的依赖性,最终会导致脆弱或不可靠的测试,更不用说上面链接的文章中提到的过多其他邪恶.

依赖注入是我想的方式.如果它变得太麻烦,您可以考虑使用工厂模式来隔离设置依赖关系的逻辑.如果你真的想要一直这样,你可以考虑使用像StructureMap这样的控制反转工具.