遗留代码的Java重构策略

时间:2015-10-22 13:43:09

标签: java unit-testing testing mocking refactoring

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

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

我的第一个想法是存根第三方库(使用适当的模拟框架),以便我可以轻松地测试感兴趣的代码而不是第三方库。但是,要做到这一点,我需要重构一些代码,以便感兴趣的代码与外部库依赖关系隔离。

我最初的想法是提取一个接口并使用包装器来调用库。但是,要完全解耦库,我还需要删除库特定类型,而不仅仅是方法调用,例如

LibrarySpecificType[] myVar = wrappedLibrary.DoX();

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

我如何解决这个问题?重构代码以实现此目的的最佳策略是什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

  1. 我同意你的看法,为第三方lib创建一个外观是个好主意。然后谈谈这个立面而不是第三方lib。因此,引用lib的唯一位置就在你的门面。

  2. LibrarySpecificType的问题有点问题。你可以再包装它们,但这会有帮助吗?不确定

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

相关问题