gpt4 book ai didi

遗留代码的 Java 重构策略

转载 作者:行者123 更新时间:2023-11-28 20:54:02 24 4
gpt4 key购买 nike

我被要求对一些遗留代码进行单元测试。

目前,代码在方法调用和使用的类型方面都与第 3 方库紧密耦合。

我的第一个想法是 stub 第 3 方库(使用适当的模拟框架),这样我就可以轻松测试感兴趣的代码而不是第 3 方库。但是,为此,我需要重构一些代码,以便将感兴趣的代码与外部库依赖项隔离开来。

我最初的想法是提取接口(interface)并使用包装器调用库。但是,为了完全分离库,我也需要删除特定于库的类型,而不仅仅是方法调用,例如

LibrarySpecificType[] myVar = wrappedLibrary.DoX();

虽然我在上面的例子中包装了我的库调用,它仍然返回一个特定于库的类型,所以它仍然有些耦合。

我该如何解决这个问题?重构代码以启用此功能的最佳策略是什么?

谢谢!

最佳答案

  1. 我同意你的观点,为第三方库制作外观是个好主意。然后与这个外观而不是第 3 方库交谈。因此,唯一引用 lib 的地方是在您的外观中。

  2. LibrarySpecificType 的问题要复杂一些。同样,您可以将它们包裹起来,但这会有帮助吗?不确定

  3. 至于测试。我会使用 mockito/powermockito。您可以告诉它从您的库的模拟中返回一个模拟(LibrarySpecificType)并以这种方式进行测试。显然让一个 mock 返回一个 mock 是糟糕设计的标志,在这种情况下,它指向 LibrarySpecificType

关于遗留代码的 Java 重构策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33282507/

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