我被要求单元测试一些遗留代码。
目前,代码在方法调用和使用的类型方面与第三方库紧密耦合。
我打算以Façade设计模式的形式在库周围编写一个包装器,这将有助于测试性,为其余部分创建一个更清晰的界面代码,如果需要,允许我将来换出库。
这在方法调用 void return type 的情况下工作正常,因为库函数是自包含的。但是,如果现有代码使用特定于库的类型呢?这里有一个例子:
LibrarySpecificType[] myVar = wrappedLibrary.DoX();
虽然我已经在上面的例子中包装了我的库调用,但它仍然返回一个特定于库的类型,所以它仍然有点耦合。
有人知道解决这个问题吗?
答案 0 :(得分:3)
您可以围绕返回的类型创建包装类,并让wrappedLibrary
返回这些包装类型。如果这些类型中的每一个都公开接受和返回其他类型的方法,那么这可能是相当多的工作。像这样:
WrappedLibrarySpecificType[] myVar = wrappedLibrary.DoX();
然后在库中,包装器必须调用实际的库并包装库返回的类型并返回包装类型。
这最终成了一个兔子洞,你可能需要包裹每一种类型。
如果这是一个大型库,您可能会在编写(或使用)工具时找到一些好处,该工具可以通过反映第三方库中的类型来为您生成包装器
您可能会在generating the delegating members获得一些帮助,具体取决于您的想法