繁体   English   中英

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

[英]Strategy to make a third-party library implement interfaces?

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

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

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

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

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

背景:

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

编辑,重新删除:您可能会认为您使用的库“稳定”。 但是,由于它与“外部”系统(文件系统)交互,我可能仍然希望将我的系统与其分离。

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

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

回答你的问题:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM