6

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

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

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

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

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

4

1 回答 1

11

背景:

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

编辑,重新编写:您可能会考虑使用“稳定”的库。但是,由于它与“外部”系统(文件系统)交互,我可能仍想将我的系统与它分离。

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

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

回答你的问题:

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

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

于 2013-09-30T12:45:25.177 回答