我是一个有用的助手,可以为您提供文本翻译。
我正在处理一个使用单例模式和全局变量的大型代码库,现在尝试编写一些单元测试,但是单例模式和全局变量给我带来了很多问题。经过阅读,依赖注入似乎是解决问题的方法。
要进行这种改变的重构任务非常令人望而生畏,我正在努力找出最佳方法。据我理解,基本思路是将类似以下的内容:
foo()
{
GraphicsCache::Instance()->GetMyImage();
// do stuff
}
把它转换成类似下面这样的东西:
foo(GraphicsCache *Cache)
{
Cache->GetMyImage();
// do stuff
}
这样我就可以制作这些对象的模拟,并在我的测试中使用这些模拟。但是有很多这些类型的对象(事件记录器、网络对象、其他缓存等),这基本上意味着我将不得不在各个地方传递大量对象,并且最终将在各个地方添加大量代码。我理解得对吗?有更好的方法吗?
我想到的一个主意是,有一个单一的对象,它是所有当前全局对象的容器,我只需要传递一个单一的引用,但是这感觉不对,因为大多数地方不需要访问每一个全局对象,只需要子集即可。