2017-07-03 11 views
-1

私はCSVファイルを検証する方法を書いています。私もユニットテストをしていますので、私は模擬csvファイルを使って模擬ファイルシステムを設定していますSystem.IO.Abstractions私はTextFieldParserを使ってcsvファイルを読み込みたいのですが、読み方を教えてくださいIFileSystemSystem.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 FileSystemsystem.io.abstractions)を使用して呼び出します。基本的にはこのような:

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

は.csファイル、ファイル内using System.IO.Abstractionsなしパッケージの競合を仮定。

0

ユニットテストの主なルールの1つは、外部ファイルを準備しないことです。私はあなたがモックファイルを読み込もうとしているのを理解できますが、それはまだファイルです。つまり、ユニットテストは依存関係のある外部ファイルを読み込もうとしているので、避けるべきです。

+0

単体テストは、ファイル構造とファイルの内容を完全に設定します。そこには外部からの影響はありません。ユニットテスト自体はファイルを読み取っていません。ファイル構造を渡す方法は(通常と呼ばれるときにローカルファイル構造を読むのと同じです)。 – user1339253

関連する問題