2011-08-12 82 views
2

我想在單元測試中測試我的請求生成器。但是當我想測試我的POST請求的方法時,我遇到了問題。我想在請求流中測試它的內容。 但問題是,我無法在我的測試中讀取此流,因此我無法測試我的數據是否以正確的方式寫入請求。 我有這個問題,因爲當我在我的請求生成器類寫入它後關閉流。我無法打開它進行閱讀,因爲在流中調用Close()方法後,它變得不可讀。 那麼,在調用Close()方法後有沒有讀取流的方法?從封閉流中讀取

如果這是不可能的,你會如何解決這個問題?

回答

3

嘗試在流的周圍創建一些包裝並提取它的接口。該接口可能只包含其他代碼中必需的成員。 在您的代碼中使用該接口並允許注入/創建要使用的不同特定類型的實例 - 例如,創建強制構造函數的參數,該參數在包含代碼的類中設置字段。 然後創建一些模擬實現該接口並在單元測試中使用它。

+0

是的,這似乎是一個好主意。 :) – Vajda

+0

是的,這解決了一個問題。 – Vajda

0

流關閉後,其內容實際上無法訪問,因爲基礎緩衝區被釋放或傳遞給另一個實體進行處理或處理。

我不確定你正在使用哪個Stream類,但大多數提供了一個.Seek方法和一個.Position屬性來倒回流。嘗試一下,而不是關閉流。 (儘管在完成之後仍然需要關閉流。)

+0

我只是添加而不是直接調用Close(),最好調用Dispose(),後者依次調用Close(),跟在IDisposable模式之後。 'using'關鍵字通過在退出using塊後自動調用IDisposable.Dispose()來支持這種模式。 –

+0

我沒有明確地調用它,我在using(){}中用stream包裝了我的操作,所以它是自動完成的。 – Vajda

+0

@David Lively我在真正的實現中完成了所有與我的流。我只是想在我的測試代碼中讀取流內容,所以.Seek或.Position不是解決方案。 – Vajda