单身人士测试和子类化

Mou*_*hna 6 testing singleton design-patterns subclassing

我在使用picocontainer时看到了这一点.他们说你必须避免单身.因为Singleton模式使得类(以及可能依赖于它的所有其他类)几乎不可能是可测试的.子类化或为Singleton类创建模拟对象非常困难.

但是如果你绝对需要它,那么测试和子类化问题是否有解决方法?

Nat*_*hes 5

难以测试单例的是执行单例的代码(意思是public static MySingleton getInstance() {...}样板).使用像Picocontainer或Guice或Spring这样的控件反转容器可以从对象中删除该问题,现在:

  • 它可以实例化,并在测试中将协作者插入其中而不会出现问题.

  • 调用单例的代码不必知道它正在查找哪个类(如果必须调用静态方法则需要知道它).

我将picocontainer网站上的建议解释为与此类似.他们告诉您的是,让我们的容器为您管理组件的范围,不要将范围执行代码硬连接到它们中.