我如何告诉 TextFieldParser 从提供的文件系统中解析?

How do I tell TextFieldParser to parse from a provided filesystem?

我正在编写一种验证 csv 文件的方法。我也在进行单元测试,所以我正在使用 System.IO.Abstractions 设置一个带有模拟 csv 文件的模拟文件系统 我想使用 TextFieldParser 来读取 csv 文件,但是我不确定我如何告诉它从提供的 IFileSystem(来自 System.IO.Abstractions)中的路径读取。

基本上,代码如下所示:

    internal static bool ValidateCsvFile(IFileSystem fileSystem, string path)
    {
        var validated = false;
        using (var csvReader = new TextFieldParser(path))
        {
            //validation
        }
    }

而且我想知道我实际上是如何告诉 TextFieldParser 使用提供的文件系统从路径解析,而不是使用本地计算机。

单元测试的主要规则之一是它不应该准备任何外部文件。我可以理解您正在尝试读取模拟文件,但它仍然是一个文件,这意味着您的单元测试正在尝试读取一个外部文件,这是一个依赖项,应该避免。

自己找到了解决办法。您必须像这样设置 using 语句:

        using (var csvReader = new TextFieldParser(fileSystem.FileInfo.FromFileName(path).OpenRead()))

这将允许您从模拟文件系统或本地文件系统中读取文件,如果您是正常的 运行 程序并且它调用单独的 public 方法调用此方法使用 new FileSystem(来自 system.io.abstractions)。基本上是这样的:

    public static bool ValidateCsvFile(string path)
    {
        return ValidateCsvFile(new FileSystem(), path);
    }

假设 .cs 文件中有一个 using System.IO.Abstractions,并且没有包冲突。