我想为我的一些课程编写单元测试.我的一些类依赖于使用文件系统并且没有模拟接口的第三方库.
我要模拟类以避免它依赖于文件系统,因为我的代码实际上只关心该代码的结果.
在不修改初始库的情况下,用于模拟库的具体类的最佳策略是什么?
我想我可能会创建一个实现接口并包含初始库对象的包装器对象.但是,我想确保在开始这条道路之前可能没有更好的方法.
或者,在这种情况下,像TypeMock这样的工具是否比Moq更适合?
解决方法
背景:
除非它是一个像.NET框架一样稳定的库/框架,否则我更愿意将代码与它分离.也就是说,我喜欢让库依赖于我的系统,而不是相反.
编辑,重新删除:您可能会认为您使用的库“稳定”.但是,由于它与“外部”系统(文件系统)交互,我可能仍然希望将我的系统与其分离.
为此,我为库创建了一个适配器/包装器.该接口具有我的系统希望库具有的方法,而不是库碰巧提供的方法.该接口使用我的系统拥有的类型,而不是库中的任何类型.适配器使任何转换成为必要.
我这样做是否要模拟/存根/伪造库,因为它提供了良好的关注点分离,并且它还保护我的系统免受库中的更改.
回答你的问题:
一旦适配器/包装器在那里,很容易在测试中伪造它.作为奖励,由于适配器使用您的系统语言,因此编写易于阅读和理解的测试会更容易.
无论你是使用模拟框架还是为adapeter编写自己的假货都是一种品味问题.