我有一个场景,我需要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环境中获得相同的信息.
System.IO.Abstractions 为您提供了一个 IFileInfo 接口来进行编码,您可以创建自己的实现来返回您感兴趣的测试统计信息。
在这种情况下,您需要另一个方法将 IFileInfo 返回到您的 Initialize 方法,该方法可以是虚拟的,以便在您的测试中它只返回您的假值而不是真正访问系统。