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

时间:2017-07-03 14:47:48

标签: c# csv textfieldparser

我正在编写一个验证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使用提供的文件系统从路径解析而不是使用本地计算机。

2 个答案:

答案 0 :(得分:1)

我自己找到了解决方案。你必须像这样设置using语句:

Settings | Editor | Color Scheme | Console Colors

这将允许您从模拟文件系统或本地文件系统中的文件中读取,如果您正常运行该程序并且它调用一个单独的公共方法,该方法使用 using (var csvReader = new TextFieldParser(fileSystem.FileInfo.FromFileName(path).OpenRead())) 调用此方法(来自new FileSystem)。基本上是这样的:

system.io.abstractions

假设.cs文件中有 public static bool ValidateCsvFile(string path) { return ValidateCsvFile(new FileSystem(), path); } 并且没有包冲突。

答案 1 :(得分:0)

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