如何模拟文件的FileInfo信息?

Jer*_*rry 6 c# unit-testing

我有一个场景,我需要FileInfo结构中的大部分信息 - 创建时间,最后写入时间,文件大小等.我需要能够干净地获取这些信息,但也能够真正地进行单元测试而不需要点击文件系统.

我正在使用System.IO.Abstractions,所以除了这一个,我的大部分课程都能获得99%的成绩.我不知道如何使用它从我的MockFileSystem对象获取我需要的信息.

public void Initialize(IFileSystem fs, string fullyQualifiedFileName)
{
    string pathOnly = fs.Path.GetDirectoryName(fullyQualifiedFileName);
    string fileName = fs.Path.GetFileName(fullyQualifiedFileName);

    // Here's what I don't know how to separate out and mock
    FileInfo fi = new FileInfo(fullyQualifiedFileName);

    long size = fi.LongLength;
    DateTime lastWrite = fi.LastWriteTime;
    ...
    ...
}
Run Code Online (Sandbox Code Playgroud)

任何有关该行的帮助将不胜感激.

更新:

这不是现有问题的完全重复,因为我问我该System.IO.Abstractions怎么做,而不是我一般如何做.

对于那些感兴趣的人,我确实找到了实现它的方法:

FileInfoBase fi = fs.FileInfo.FromFileName(fullFilePath);
Run Code Online (Sandbox Code Playgroud)

如果我使用这一行,我会在TEST和PROD环境中获得相同的信息.

Jas*_*ray 1

https://github.com/TestableIO/System.IO.Abstractions/blob/5f7ae53a22dffcff2b5716052e15ff2f155000fc/src/System.IO.Abstractions/IFileInfo.cs

System.IO.Abstractions 为您提供了一个 IFileInfo 接口来进行编码,您可以创建自己的实现来返回您感兴趣的测试统计信息。

在这种情况下,您需要另一个方法将 IFileInfo 返回到您的 Initialize 方法,该方法可以是虚拟的,以便在您的测试中它只返回您的假值而不是真正访问系统。