为第三方库的依赖注入编写包装器和接口的自动化方法?

Automated way to write a wrapper and interface for dependency injection of third party libraries?

我正在使用第三方库 class Foo,它有几个 public 方法和属性,我的 class 将其用作依赖项。

我想测试我的 class 并模拟 Foo 对象,但它没有接口。所以我在想,我可以在我自己的 class 中继承 class,提取一个接口,瞧!我会有一个可注射的界面。

...当然也有并发症。 Foo 有一堆 public 字段。这些不能进入界面,所以我必须为字段编写 属性 包装器。很烦人。

是否有自动执行此操作的方法?我有 ReSharper,但似乎没有办法自动执行此操作,这意味着我正在编写大量乏味的代码。

我会创建一个包装器 class,它使用您设计的界面,仅公开您需要的 Foo。

例如:

class MyFooWrapper : IFoo
{
   private Foo _foo;
    // methods exposed by IFoo
 }

您可以进一步将 MyFooWrapper 设为抽象 class 以包含属性和任何其他基本功能,但不要将 Foo 放在那里,而是让 class 继承 foo 包装器.

您应该将测试中的 class 分成两个单独的 class。一个 class 包含您需要测试的(业务)逻辑,第二个 class 充当外部依赖项的适配器。这个适配器 class 应该实现一个接口,逻辑 class 应该依赖于那个接口。这个接口应该模仿外部依赖的API,但是接口应该在应用程序的需要中定义。通过这样做,您可以:

您最终会得到一个与外部库紧密耦合的适配器 class。该适配器会将传入调用转换为可以发送到外部库的内容。此适配器无法单独测试,如果测试很重要,您可能需要对此进行集成测试(取决于外部库的功能)。重要的是,您不必测试外部库是否正常工作,但您可能仍想测试适配器的正确性 class.