在遵循测试驱动开发范例时,我是否应该永远不会使用静态方法,类和单例

Mr *_*rok 17 tdd singleton static-methods design-patterns static-classes

我一直在阅读当你尝试在项目中实现单元测试时,静态方法,静态类和单例是邪恶的.在遵循TDD范例时,我是否应该忘记它们曾经存在过并且从未再次使用它们,或者有时可以使用它们吗?

Phi*_*ler 10

永远不要说永远 - 静态类和方法在你的工具箱中占有一席之地.

也就是说,如果您要隔离和测试的类(测试对象或SUT)依赖于静态类或方法,您将无法编写将SUT与该静态依赖关系隔离的测试 - 当您的测试代码时运行它仍将使用静态调用.有时这很好,但有时你想要创建一个独立的测试,只测试你的SUT的逻辑而没有依赖(通常通过模拟或类似的技术).

一般来说,我个人使用相对谨慎的静态类和方法.

由于Singletons的实现方式,它们为隔离SUT进行单元测试提出了类似的问题.此外,GOF单例概念被一定比例的软件开发人员认为是不好的做法.我碰巧同意这种观点,但在这个问题上几乎没有达成共识.快速搜索谷歌可能会让你很好地了解GOF Singleton模式的优缺点.