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

时间:2013-09-30 10:43:09

标签: c# unit-testing interface integration-testing moq

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

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

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

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

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

1 个答案:

答案 0 :(得分:10)

<强>背景

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

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

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

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

回答您的问题:

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

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