我正在编写一个验证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
使用提供的文件系统从路径解析而不是使用本地计算机。
答案 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)
单元测试的主要规则之一是它不应该准备任何外部文件。我可以理解你正在尝试读取模拟文件,但这仍然是一个文件,这意味着你的单元测试试图读取一个依赖的外部文件,应该避免。