2

次の方法の単体テストをしたい

public IEnumerable<T> GetData<T>(StreamReader fileStream) where T : new()

ストリームリーダーは、特定の列名を持つCSV形式のファイルである必要があります。

単体テストごとにファイルシステムに多数のファイルを用意するのではなく、コードでそのようなファイルを作成することは可能ですか?

何か案は?

アップデート:

私がLinq2Csvを使用しているライブラリに気付いたばかりで、これを正確に実行するためのメソッドがあります

http://www.codeproject.com/KB/linq/LINQtoCSV.aspx

4

4 に答える 4

1

テストでは、ファイルまたはからではなく、からStreamReader読み取るメソッドaを渡すことができます。次に、テストアレンジ中のファイルの内容に似た内容を入力できます。MemoryStreamFileStreamMemoryStream

于 2010-02-05T11:01:46.747 に答える
1

もちろん:

var buffer = Encoding.Default.GetBytes("ab;cd;ef");
using (var stream = new MemoryStream(buffer))
using (var reader = new StreamReader(stream))
{
    var actual = GetData<SomeClass>(reader);
    // TODO: assert on actual
}
于 2010-02-05T11:02:27.027 に答える
1

理想的には、署名を次のように変更します。

public IEnumerable<T> GetData<T>(TextReader fileStream) where T : new()

StringReaderそうすれば、本当に簡単に渡すことができます。

代替案:

  • サンプルファイルをテストアセンブリに埋め込み、ストリームをフェッチして、そこからストリームをAssembly.GetManifestResourceStream()作成しますStreamReader
  • 結果を使用Encoding.GetBytes(text)してラップし、そのMemoryStream上にStreamReaderを構築します

簡単なテストでは、StringReaderバージョンを使用します。より多くのデータについては、テストアセンブリにファイルを埋め込むと非常に効果的です。

于 2010-02-05T11:02:33.640 に答える
0

私がLinq2Csvを使用しているライブラリに気付いたばかりで、これを正確に実行するためのメソッドがあります

http://www.codeproject.com/KB/linq/LINQtoCSV.aspx

答えてくれてありがとう

于 2010-02-05T11:05:13.497 に答える