2011-08-12 7 views
2

私はユニットビルダーでリクエストビルダーをテストしたいと思います。しかし、POSTリクエストを行うメソッドをテストしたいときに問題があります。リクエストストリーム内のコンテンツをテストしたいのですが。 しかし、問題は、私のテストでこのストリームを読むことができないので、私のデータが要求の中で正しい方法で書かれているかどうかをテストすることができないということです。 リクエストビルダークラスでストリームを書き込んだ後にストリームを閉じると、この問題が発生します。ストリーム上でClose()メソッドを呼び出した後は読み込み不能になるため、読み込み用に開くことはできません。 Close()メソッドを呼び出した後にストリームを読み取る方法はありますか?閉鎖から読んでください

これができない場合は、この問題をどのように解決しますか?

答えて

3

ストリームの周りにラッパーを作成してインターフェイスを抽出してみます。このインターフェイスには、他のコードで必要なメンバーだけが含まれている場合があります。 コード内でそのインタフェースを使用し、使用する異なる特定のタイプのインスタンスを挿入/作成することができます。コードを含むクラスのフィールドを設定する必須のコンストラクタのパラメータを作成します。 次に、そのインタフェースを実現するモックを作成し、単体テストで使用します。

+0

これは良い考えのようです。 :) – Vajda

+0

うん、それはprlblemを解決しました。 – Vajda

0

ストリームが閉じられると、そのストリームの内容は効果的にアクセスできなくなります。これは、基になるバッファが解放されるか、処理または廃棄のために別のエンティティに渡されるためです。

使用しているストリームクラスはわかりませんが、ほとんどの場合、.Seekメソッドとストリームを巻き戻す.Positionプロパティが用意されています。ストリームを閉じる代わりにそれを試してみてください。 (実際にストリームを終了してもストリームを閉じる必要がありますが)。

+0

Close()を直接呼び出すのではなく、単にDispose()を呼び出すことをお勧めします.Dispose()は、IDisposableパターンに従って、Close()を呼び出します。 'using'キーワードは、useブロックが終了すると自動的にIDisposable.Dispose()を呼び出してこのパターンをサポートします。 –

+0

私はこのクローズを明示的にクローズしているわけではありません。ストリームを使って操作を(){}でラップしたので、自動的に行われます。 – Vajda

+0

@David Lively私は本当の実装で自分のストリームですべてを行いました。私はちょうど私のテストコードでストリームの内容を読みたいので、.Seekまたは.Positionは解決策ではありません。 – Vajda

関連する問題