【问题标题】:Strategy for Wrapping external library return types包装外部库返回类型的策略
【发布时间】:2015-10-27 09:16:51
【问题描述】:

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

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

我正计划以 Façade 设计模式 的形式围绕库编写一个 包装器,这将有助于可测试性,为其余部分创建更简洁的界面代码并允许我在将来根据需要换出库。

这在方法调用是 void 返回类型 的情况下工作得很好,因为库函数是自包含的。但是如果现有代码使用库特定类型怎么办?一个例子在这里:

LibrarySpecificType[] myVar = wrappedLibrary.DoX();

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

有人知道解决这个问题的方法吗?

【问题讨论】:

    标签: unit-testing junit mocking refactoring tdd


    【解决方案1】:

    您可以围绕返回的类型创建包装类,并让wrappedLibrary 返回这些包装类型。如果这些类型中的每一个都公开了接受和返回其他类型的方法,那么这可能是一项相当多的工作。像这样的:

    WrappedLibrarySpecificType[] myVar = wrappedLibrary.DoX();
    

    然后在库包装器中将不得不调用实际的库并包装库返回的类型并返回包装后的类型。

    这最终会变成一个兔子洞,您可能需要包装每种类型。

    如果这是一个大型库,您可能会发现编写(或使用)一个工具会带来一些好处,该工具能够通过反映第三方库中的类型为您生成包装器

    您可能会在 generating the delegating members 中获得一些帮助,具体取决于您的 ide

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-03
      相关资源
      最近更新 更多