【发布时间】:2011-03-10 02:35:53
【问题描述】:
在处理遗留代码并尝试创建测试时,我经常从类或方法中分离出依赖项,以便我可以为这些依赖项使用模拟来编写单元测试。依赖关系最常见的形式是调用静态类和使用构造函数中的 new 关键字或该类中的其他位置创建的对象。
在大多数情况下,静态调用是通过包装静态依赖项来处理的,或者如果它的单例模式(或类似模式)以 StaticClass.Current.MethodCall() 的形式通过其接口传递该依赖项,则转而使用构造函数。
在大多数情况下,在构造函数中使用 new 关键字只是通过在构造函数中传递该接口来代替。
在大多数情况下,在类的其他部分使用 new 关键字,可以通过与上述相同的方法来处理,也可以根据需要创建一个工厂,并在构造函数中传递工厂的接口。
我总是使用 Resharpers 重构工具来帮助我完成所有这些突破,但是大多数事情仍然是手工劳动(可以自动化),而且对于一些遗留类和方法来说,这可能是一个非常乏味的过程。在这个过程中是否有任何其他重构插件和/或工具可以帮助我?是否有“一次单击即可从此类中打破所有依赖项”的重构工具? =)
在我看来,所有这些步骤对于许多开发人员来说都很常见,也是一个常见问题,在我尝试向 Resharper 或 CodeRush 编写插件之前,我必须问一下,因为可能已经有人尝试过这个了..
添加:
反思下面的答案:即使您可能不想一次分解所有内容(单击总分解可能会导致更多问题而不是帮助)仍然能够简单地分解 1 个方法依赖项,或 1-2容易依赖,会有很大的不同。
此外,重构代码具有“尝试看看会发生什么,只是为了了解所有内容如何组合在一起”的衡量标准,即使您不签入该代码,一键式总突破也将有助于该过程大量......
【问题讨论】:
-
除了下面提到的经典有效地使用遗留代码之外,您可能会发现 .NET 中的棕地应用程序开发很有趣:manning.com/baley
标签: c# dependencies refactoring