我如何告诉 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
,并且没有包冲突。
我正在编写一种验证 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
,并且没有包冲突。