-1

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

基本上,代码看起来像这样:

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

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

4

2 回答 2

1

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

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

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

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

假设using System.IO.Abstractions在 .cs 文件中没有包冲突。

于 2017-07-03T15:32:24.653 回答
0

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

于 2017-07-03T14:53:19.960 回答