首页 > 解决方案 > 从 FileInfo.FromFileName() 返回时,添加到 MockFileSystem 的文件没有 Exists = true

问题描述

也可以在... https://github.com/System-IO-Abstractions/System.IO.Abstractions/issues/393上找到

(但这里有更广泛的受众)

在测试中,我有以下内容:

var testSettings = new ApplicationSettings() { DefaultLedgerFilename = testLedgerFilename };

//Add the byte array as file data
var fileData = new MockFileData(testSettings); //I added an overload PR #389

//Create a file system with the fake data as a "file"
var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>
{
{ AppDomain.CurrentDomain.BaseDirectory+"MoneyTrackerConfig.config", fileData }
});

在代码库中,我有以下内容:

var tempFile = _fileSystem.FileInfo.FromFileName(_path);
if (tempFile.Exists && (tempFile.Length > 0))
{
    ...

问题是当我运行测试“tempFile.Exists”时返回“false”。即使我在驱动器上创建文件,它也会返回“假”。我究竟做错了什么?

标签: unit-testingmoqc#-7.0

解决方案


发现问题。经过一天的调试(包括深入研究和调试 System.IO.Abstractions 源代码),我意识到我错过了一个反斜杠。

是的,纯粹的用户错误。注意上面的行

{ AppDomain.CurrentDomain.BaseDirectory+"MoneyTrackerConfig.config", fileData }

... 它应该是 ...

{ AppDomain.CurrentDomain.BaseDirectory+@"\MoneyTrackerConfig.config", fileData }

很抱歉任何认真对待这件事的人。我觉得荒谬。


推荐阅读