首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为第三方库的依赖注入编写包装器和接口的自动化方法?

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

Stack Overflow用户
提问于 2015-07-28 15:47:53
回答 2查看 1.2K关注 0票数 9

我正在使用第三方库类Foo,它有几个公共方法和属性,我的类使用这些方法和属性作为依赖项。

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

...but当然也有并发症。Foo有许多公共字段。这些不能进入接口,所以我必须为字段编写属性包装器。这很烦人。

有自动化的方法吗?我有ReSharper,但似乎没有自动实现这一功能的方法,这意味着我正在编写大量乏味的代码。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-28 15:53:19

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

例如:

代码语言:javascript
复制
class MyFooWrapper : IFoo
{
   private Foo _foo;
    // methods exposed by IFoo
 }

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

票数 2
EN

Stack Overflow用户

发布于 2015-07-28 16:08:49

您应该将被测试的类分成两个单独的类。一个类包含您需要测试的(业务)逻辑,另一个类充当外部依赖项的适配器。这个适配器类应该实现一个接口,逻辑类应该依赖于该接口。这个接口不应该模仿外部依赖项的API,但是应该根据应用程序的需要定义接口。通过这样做,您可以实现以下目标:

  • 坚持单一责任原则,因为当前测试下的类有两项责任。
  • 通过将新适配器放在抽象后面来遵守依赖反演原理。这就避免了应用程序不得不依赖于外部工具(只有组合根需要依赖它),这使得应用程序更易测试,更易于维护。
  • 遵循界面偏析原理,即接口应该是狭窄的,并为他们所参与的角色定义。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31681275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档