代码之家  ›  专栏  ›  技术社区  ›  Jeremy Holovacs

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

  •  9
  • Jeremy Holovacs  · 技术社区  · 9 年前

    我正在使用第三方图书馆课程 Foo 它有几个我的类用作依赖项的公共方法和属性。

    我想测试我的班级并模拟 食品 对象,但它没有接口。所以我在想,我可以在自己的类中继承这个类,提取一个接口,瞧!我会有一个可注射的接口。

    ……但当然有一些复杂的问题。 食品 有很多公共字段。这些不能进入接口,因此我必须为字段编写属性包装器。这很烦人。

    有没有一种自动化的方法来做到这一点?我有ReSharper,但似乎没有办法自动实现这一点,这意味着我正在编写大量乏味的代码。

    2 回复  |  直到 9 年前
        1
  •  3
  •   Steven    9 年前

    你应该把测试中的班级分成两个单独的班级。一个类包含需要测试的(业务)逻辑,另一个类充当外部依赖项的适配器。这个适配器类应该实现一个接口,逻辑类应该依赖于该接口。此接口应 模拟外部依赖的API,但接口应根据应用程序的需要进行定义。通过这样做,您可以实现:

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

        2
  •  2
  •   Jonathan    9 年前

    我将创建一个包装器类,它使用您设计的接口,只从Foo中公开您需要的内容。

    例如:

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

    您可以进一步使MyFooWrapper成为一个抽象类,以包含属性和任何其他基本功能,但不要将Foo放在其中,而是有一个继承Foo包装器的类。