2017-07-03 58 views
-1

我在写一个验证csv文件的方法。我也是单元测试,所以我使用System.IO.Abstractions设置模拟文件系统和模拟csv文件我想用TextFieldParser来读取csv文件,提供了IFileSystem(来自System.IO.Abstractions)的路径。如何告诉TextFieldParser从提供的文件系统解析?

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

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

而且我想知道我怎么本质告诉TextFieldParser使用所提供的文件系统的路径来分析,而不是使用本地计算机。

+0

什么是“路径”?文件或(子)目录的路径还有其他什么? –

+0

提供的路径是模拟文件系统上文件路径的简单字符串。这就像一个正常的路径(在我的情况下,它只是“C:\ testfiles \ testfile1.csv”)。但是,我刚刚偶然发现了一个适用于我的解决方案。我现在将它发布。试图使用这个软件包找到解决方案真的很烦人,因为没有文档。 – user1339253

回答

1

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

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

这将让你在嘲笑的文件系统中的文件,或本地文件系统读取,如果你正常运行程序,并呼吁独立的公方法使用new FileSystem(来自system.io.abstractions)调用此方法。基本上是这样的:

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

假设在的.cs文件一个using System.IO.Abstractions和无包冲突。

0

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

+0

单元测试完全设置文件结构和文件内容。没有外部影响。单元测试本身不读取文件。它传递文件结构的方法(就像它在正常调用时读取本地文件结构一样)。 – user1339253

相关问题