小编典典

您如何在 C# 中模拟文件系统以进行单元测试?

all

是否有任何库或方法可以在 C# 中模拟文件系统来编写单元测试?在我目前的情况下,我有一些方法可以检查某个文件是否存在并读取创建日期。将来我可能需要更多。


阅读 53

收藏
2022-08-20

共1个答案

小编典典

编辑:安装 NuGet
System.IO.Abstractions

最初接受此答案时,此软件包不存在。原始答案是针对以下历史背景提供的:

你可以通过创建一个接口来做到这一点:

interface IFileSystem {
    bool FileExists(string fileName);
    DateTime GetCreationDate(string fileName);
}

并创建一个使用 System.IO.File.Exists()
等的“真实”实现。然后您可以使用模拟框架模拟此接口;我推荐起订量

编辑:有人这样做了,请在这里在线发布

我已经使用这种方法在 IClock 接口中模拟了
DateTime.UtcNow(对于我们的测试能够控制时间流真的非常有用!),更传统的是,ISqlDataAccess 接口。

另一种方法可能是使用TypeMock,这允许您拦截对类的调用并将它们存根。然而,这确实要花钱,并且需要安装在整个团队的
PC 和构建服务器上才能运行,而且它显然不适用于 System.IO.File,因为它不能存根
mscorlib

您也可以接受某些方法不可单元测试,并在单独的缓慢运行的集成/系统测试套件中对其进行测试。

2022-08-20