2012-09-18 9 views
7

私は、すべてのインターフェイスを実装し、パラメータの1つがStreamWriterであるクラスの束を持っています。C#ユニットStreamWriterパラメータをテストします。

StreamWriterの内容を確認する必要があります。

私は、テストサーバーにテキストファイルを書き込むのを避け、内容を確認するためにそれらを開く方法を見つけようとしています。

StreamWriterコンテンツ/ストリームをStringBuilder変数に素早く変換する方法はありますか?

答えて

11

チェックStreamWriterを入力することはできません。あなたはそれが書き込んでいる基底のストリームをチェックすることができます。だからあなたはユニットテストでMemoryStreamを使用し、それにはStreamWriterを指すことができます。あなたが書き終わったら、それから読むことができます。

[TestMethod] 
public void SomeMethod_Should_Write_Some_Expected_Output() 
{ 
    // arrange 
    using (var stream = new MemoryStream()) 
    using (var writer = new StreamWriter(stream)) 
    { 
     // act 
     sut.SomeMethod(writer); 

     // assert 
     string actual = Encoding.UTF8.GetString(stream.ToArray()); 
     Assert.AreEqual("some expected output", actual); 
    } 
} 
+1

'StreamWriter'は、デフォルトでUTF-8を使用していますので、それは' actual'を取得するために使用されるべきものです。 –

+0

良い点@ジョン、いつものように。 –

+0

これは、感謝しました。私は実際の文字列varを使用の外側で宣言し、使用の外でそれをテストしただけです。 –

9

私はすべての可能な場合は、TextWriterにパラメータを変更することをお勧め - あなたはStringWriterを使用することができ、その時点で。

また、あなたがそれを巻き戻し、または単にバイト配列として内容を完全に取得するにはToArray()を呼び出すことにより、どちらか(後でそのMemoryStreamの内容をテストします。あなたが本当にテストになりたい場合は、その後、MemoryStream周りStreamWriterを作成することができますテキストしかし、それが使用することを間違いなく簡単ですStringWriter

+0

それを変更できるかもしれませんが、インターフェイスはいくつかの他のクラスで使用されています。 –

+3

@ user295734:*それを使用していても、 'StreamWriter'を渡すことはできますが、あなたが本当に何かを書くことができれば、' TextWriter'はほぼ確実に使用する抽象です。インターフェイスの*実装*だけを変更する必要があります...そして、それらがうまくいくと思います。 –

+0

もし私が新鮮になっていれば、おそらく変更を加えることになるでしょう。他の人々のコードなどを変更するだけで、私はすべてのコードをテストする時間がありません。彼らのコード。)次回のヘッドアップに感謝します。 –

2

あなたはMemoryStreamをへの書き込みのStreamWriterでそれを置き換えることができます。あなたは、テストケースをモックする必要があり、その場合には

1

。あなたは、フレームワークの同類を使用することができますrhino mocks。フレームワークを賭けることの利点つまり、オブジェクトの内容を確認できますが、サーバーにアクセスしたり、サーバーのリソースを占有したりする必要はありません。

このリンクは、あなたの基本的な例を提供します:http://www.codeproject.com/Articles/10719/Introducing-Rhino-Mocks

+2

この場合、なぜ嘲笑が必要だと思いますか? OPがコードがエラーでどのように動作しているかをテストしたいが、何が書かれているのかを知るためには、モッキングを使う必要はない。 –

+1

ユニットテストではMoqを使用しています。 –

関連する問題