我被要求对一些旧代码进行单元测试。
当前,该代码在方法调用和所用类型方面都与第三方库紧密耦合。
我计划以Façade设计模式的形式在库周围编写包装程序,这将有助于可测试性,为其余代码创建更简洁的接口,并允许我将来在需要时换出库。
由于库函数是自包含的,因此在方法调用为void返回类型的情况下,此方法可以很好地工作。但是,如果现有代码使用特定于库的类型怎么办?一个例子在这里:
LibrarySpecificType[] myVar = wrappedLibrary.DoX();
尽管我在上面的示例中包装了库调用,但是它仍然返回特定于库的类型,因此仍然有些耦合。
有谁知道解决这个问题的方法吗?
您可以围绕返回的类型创建包装器类,并wrappedLibrary
返回这些包装的类型。如果这些类型中的每一个还公开了接受并返回其他类型的方法,则可能需要进行大量工作。像这样的东西:
WrappedLibrarySpecificType[] myVar = wrappedLibrary.DoX();
然后,在库包装器中,必须调用实际的库并包装库返回的类型,并返回包装的类型。
但是最终这是一个兔子洞,您可能需要包装每种类型。
如果这是一个大型库,则可能会在编写(或使用)工具时有所收益,该工具将能够通过反映第三方库中的类型来为您生成包装器
您可能需要一些帮助来创建委派成员,具体取决于您的想法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句