使第三方库实现接口的策略

本文关键字:策略 接口 实现 第三方 | 更新日期: 2023-09-27 18:33:21

我想为我的一些类编写单元测试。我的一些类依赖于使用文件系统并且没有接口可以模拟的第三方库。

我会模拟该类以避免它对文件系统的依赖,因为我的代码实际上只关心该代码的结果。

在不修改初始库的情况下模拟库的具体类的最佳策略是什么?

我想我可能会创建一个实现接口并包含初始库对象的包装器对象。但是,我想确保在我开始走这条路之前没有更好的方法。

或者,在这种情况下,像TypeMock这样的工具会比Moq更适合吗?

使第三方库实现接口的策略

背景:

除非它是像 .NET 框架这样的稳定库/框架,否则我更喜欢将我的代码与它分离。也就是说,我喜欢让库依赖于我的系统,而不是相反。

编辑,重新构建:您可能会认为您使用的库是"稳定的"。但是,由于它与"外部"系统(文件系统(交互,因此我可能仍然希望将我的系统与它分离。

为此,我为库创建了一个适配器/包装器。该接口具有我的系统希望库具有的方法,而不是库碰巧提供的方法。该接口使用我的系统拥有的类型,而不是库中的任何类型。适配器需要进行任何转换。

无论我是否想模拟/存根/伪造库,我都会这样做,因为它提供了良好的关注点分离,并且还可以保护我的系统免受库中更改的影响。

回答您的问题:

一旦适配器/包装器在那里,就很容易在测试中伪造它。作为奖励,由于适配器使用系统语言,因此编写易于阅读和理解的测试会更容易。

无论您是使用模拟框架还是为 adapeter 编写自己的假货都是一个品味问题。