2012-04-25 48 views
3

我回來填寫我們的應用程序在工作中的一些單元測試,並遇到以下方法。單元測試寫入HttpWebRequest的請求流

public virtual void WriteBodyToRequestStream(HttpWebRequest webRequest, byte[] redirectBodyBuffer) { 
    var requestStream = webRequest.GetRequestStream(); 
    requestStream.Write(redirectBodyBuffer, 0, redirectBodyBuffer.Length); 
    requestStream.Close(); 
} 

我想寫一個簡單的測試,在流中插入一些文本。我遇到的問題是弄清楚如何在寫入流之後驗證文本。這是迄今爲止我所擁有的。

[Test, Ignore("not working yet")] 
public void Should_write_to_request_stream() 
{ 
    var request = WebRequest.Create("http://localhost/") as HttpWebRequest; 
    request.Method = "POST"; 
    var encoding = new System.Text.UTF8Encoding(); 
    var bytes = encoding.GetBytes("testing"); 
    _helper.WriteBodyToRequestStream(request, bytes); 

    var stream = request.GetRequestStream() as MemoryStream; 
    var result = System.Text.Encoding.UTF8.GetString(stream.ToArray()); 

    Assert.AreEqual("testing", result); 
} 

當我運行此測試時,stream變量爲空。

+0

你在那裏沒有單元測試;這是一個集成測試 – GolfWolf 2012-04-25 20:15:34

+1

@ w0lf:很有幫助。謝謝。 – 2012-04-25 20:20:53

+0

什麼是_helper對象,它有什麼作用,你可以顯示源代碼嗎? – Bronumski 2012-04-25 20:22:08

回答

2

你真的需要通過HttpWebRequest到你的WriteBodyToRequestStream方法嗎?你真的不關心HttpWebRequest其更多的流你有興趣:

public virtual void WriteBodyToRequestStream(Stream requestStream , byte[] redirectBodyBuffer) { 
//var requestStream = webRequest.GetRequestStream(); remove this line. 
requestStream.Write(redirectBodyBuffer, 0, redirectBodyBuffer.Length); 
requestStream.Close(); 
} 

這使得你的方法容易測試(它的單元測試或集成測試是否我將離開來討論; P)