gpt4 book ai didi

c# - 从类中分解所有依赖项的最简单、最快的方法

转载 作者:可可西里 更新时间:2023-11-01 08:48:29 25 4
gpt4 key购买 nike

在使用遗留代码并尝试创建测试时,我经常从类或方法中分离出依赖关系,这样我就可以使用模拟来为这些依赖关系编写单元测试。依赖性最常见的形式是调用静态类和使用构造函数中的 new 关键字或该类中的其他位置创建的对象。

在大多数情况下,静态调用是通过包装静态依赖项来处理的,或者如果它是 StaticClass.Current.MethodCall() 形式的单例模式(或类似模式),则通过其接口(interface)传递该依赖项来代替构造函数。

在大多数情况下,在构造函数中使用 new 关键字只是通过在构造函数中传递该接口(interface)来代替。

在大多数情况下,在类的其他部分使用 new 关键字,要么通过与上述相同的方法处理,要么通过创建工厂(如果需要)并在构造函数中传递工厂接口(interface)来处理。

我总是使用 Resharpers 重构工具来帮助我完成所有这些突破,但是大多数事情仍然是手工劳动(可以自动化),并且对于一些遗留类和方法来说,这可能是一个非常非常乏味的过程。在这个过程中是否有任何其他重构插件和/或工具可以帮助我?是否有“单击一下即可打破此类的所有依赖项”重构工具? =)

在我看来,所有这些步骤对许多开发人员来说都是常见的,也是一个常见问题,在我尝试为 Resharper 或 CodeRush 编写插件之前,我不得不问一下,因为有人可能已经尝试过这个..

已添加:

反射(reflection)以下答案:即使您可能不想一次分解所有内容(一次单击完全分解可能会导致更多问题而不是帮助)仍然能够简单地分解 1 个方法依赖项,或 1-2 个容易依赖,会有很大的不同。

此外,重构代码有一个衡量标准“尝试看看会发生什么,只是为了了解所有东西是如何组合在一起的”,一次点击完全突破将有助于处理大量的过程,即使你没有检查代码..

最佳答案

我认为没有任何工具可以为您自动执行此操作。如您所知,使用遗留代码意味着一次只需要很少的步骤就可以更改代码。这些步骤通常故意很小,以防止出错。通常,您应该做的第一个更改是使该代码可测试。编写测试后,您可以通过修复错误或实现 RFC 的方式更改那部分代码。

因为您应该采取小步骤,所以我相信很难使用重构工具神奇地使所有依赖项消失。对于遗留系统,您几乎不想立即进行重大更改,因为破坏(并且由于缺乏测试而无法发现)的风险太大。然而,这并不意味着重构工具在这种情况下没有用。相反;他们帮了很多忙。

如果您还没有,我建议您阅读 Michael Feathers 的书 Working Effectively with Legacy Code .它详细描述了一系列模式,可帮助您将遗留代码重构为更易测试的系统。

祝你好运。

关于c# - 从类中分解所有依赖项的最简单、最快的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3149048/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com