在处理遗留代码并试图创建测试时,我经常从类或方法中分离出依赖项,以便使用模拟来编写单元测试。依赖关系通常以静态类调用和构造函数中的new关键字创建对象的形式出现。
在大多数情况下,静态调用要么通过包装静态依赖项处理,要么(如果是单例模式(或类似模式))以StaticClass.Current.MethodCall()的形式通过其接口将该依赖项传递给构造函数。
在大多数情况下,构造函数中new关键字的用法只是通过在构造函数中传递该接口来替换。
在类的其他部分中使用new关键字的情况,在大多数情况下同样通过上述方法处理,或者根据需要创建工厂,并在构造函数中传递工厂的接口。
我总是使用Resharper的重构工具来帮助我进行所有这些分解,然而,大多数事情仍然是手动操作(可以自动化),对于一些遗留类和方法来说,这可能是非常繁琐的过程。是否有其他重构插件和/或工具能够帮助我进行此过程?是否有一个“在单击中断开此类的所有依赖项”的重构工具?=)
对我来说,所有这些步骤似乎都是许多开发人员的共同问题,在尝试编写Resharper或CodeRush插件之前,我必须询问一下,因为可能已经有人尝试过了。
添加:
关于下面的答案:即使您不想一次性全部分解(一键总的分解可能会引起更多问题),仍然能够轻松地断开一个方法的依赖关系或1-2个依赖关系将有很大的差别。
此外,重构代码有一定的“尝试并查看发生了什么,以了解所有内容的组合”,即使您不检查该代码,一键式的总体分解也会大有帮助。