私は、すべてのインターフェイスを実装し、パラメータの1つがStreamWriterであるクラスの束を持っています。C#ユニットStreamWriterパラメータをテストします。
StreamWriterの内容を確認する必要があります。
私は、テストサーバーにテキストファイルを書き込むのを避け、内容を確認するためにそれらを開く方法を見つけようとしています。
StreamWriterコンテンツ/ストリームをStringBuilder変数に素早く変換する方法はありますか?
私は、すべてのインターフェイスを実装し、パラメータの1つがStreamWriterであるクラスの束を持っています。C#ユニットStreamWriterパラメータをテストします。
StreamWriterの内容を確認する必要があります。
私は、テストサーバーにテキストファイルを書き込むのを避け、内容を確認するためにそれらを開く方法を見つけようとしています。
StreamWriterコンテンツ/ストリームをStringBuilder変数に素早く変換する方法はありますか?
チェック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);
}
}
私はすべての可能な場合は、TextWriter
にパラメータを変更することをお勧め - あなたはStringWriter
を使用することができ、その時点で。
また、あなたがそれを巻き戻し、または単にバイト配列として内容を完全に取得するにはToArray()
を呼び出すことにより、どちらか(後でそのMemoryStream
の内容をテストします。あなたが本当にテストになりたい場合は、その後、MemoryStream
周りStreamWriter
を作成することができますテキストしかし、それが使用することを間違いなく簡単ですStringWriter
。
それを変更できるかもしれませんが、インターフェイスはいくつかの他のクラスで使用されています。 –
@ user295734:*それを使用していても、 'StreamWriter'を渡すことはできますが、あなたが本当に何かを書くことができれば、' TextWriter'はほぼ確実に使用する抽象です。インターフェイスの*実装*だけを変更する必要があります...そして、それらがうまくいくと思います。 –
もし私が新鮮になっていれば、おそらく変更を加えることになるでしょう。他の人々のコードなどを変更するだけで、私はすべてのコードをテストする時間がありません。彼らのコード。)次回のヘッドアップに感謝します。 –
あなたはMemoryStreamをへの書き込みのStreamWriterでそれを置き換えることができます。あなたは、テストケースをモックする必要があり、その場合には
。あなたは、フレームワークの同類を使用することができますrhino mocks。フレームワークを賭けることの利点つまり、オブジェクトの内容を確認できますが、サーバーにアクセスしたり、サーバーのリソースを占有したりする必要はありません。
このリンクは、あなたの基本的な例を提供します:http://www.codeproject.com/Articles/10719/Introducing-Rhino-Mocks
この場合、なぜ嘲笑が必要だと思いますか? OPがコードがエラーでどのように動作しているかをテストしたいが、何が書かれているのかを知るためには、モッキングを使う必要はない。 –
ユニットテストではMoqを使用しています。 –
'StreamWriter'は、デフォルトでUTF-8を使用していますので、それは' actual'を取得するために使用されるべきものです。 –
良い点@ジョン、いつものように。 –
これは、感謝しました。私は実際の文字列varを使用の外側で宣言し、使用の外でそれをテストしただけです。 –