2016-12-16 65 views
0

我有一個要求導出數據爲xml通過HTTP POST請求。它是由如下代碼完成的,現在問題是我想用模擬http請求創建單元測試。有人可以幫我解決這個問題嗎?單元測試一個方法與HTTP發佈請求嘲諷HttpWebRequest

private string WriteBytesToHttp(ExportConfiguration exportConfiguration, byte[] bytes) 
    { 

     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(exportConfiguration.Endpoint.Address); 
     Encoding encoding = exportConfiguration.Format.EncodingCodePage.ToEncoding(); 

     var contentType = string.IsNullOrEmpty(exportConfiguration.Format.ContentType) 
      ? "text/plain" 
      : exportConfiguration.Format.ContentType; 

     request.ContentType = contentType; 
     //request.ContentType = string.Format("{0}; charset={1}", contentType, encoding.HeaderName); 
     request.ContentLength = bytes.Length; 
     request.Method = "POST"; 

     if (!(string.IsNullOrEmpty(exportConfiguration.Endpoint.Username) || 
      string.IsNullOrEmpty(exportConfiguration.Endpoint.Password))) 
     { 
      var creditionStr = string.Format("{0}:{1}", exportConfiguration.Endpoint.Username, 
       exportConfiguration.Endpoint.Password); 

      request.Headers.Add("Authorization", 
       "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes(creditionStr))); 
     } 

     Stream newStream = request.GetRequestStream(); 
     newStream.Write(bytes, 0, bytes.Length); 
     newStream.Close(); 

     HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
     Stream responseStream = response.GetResponseStream(); 

     var streamReader = string.IsNullOrEmpty(response.CharacterSet) 
      ? new StreamReader(responseStream) 
      : new StreamReader(responseStream, Encoding.GetEncoding(response.CharacterSet)); 

     string responseStr = streamReader.ReadToEnd(); 
     return String.IsNullOrEmpty(responseStr) ? response.StatusCode.ToString() : responseStr; 

    } 
+3

什麼是* *正是你的問題?任何錯誤? – RandomStranger

+0

需要通過嘲笑HTTP服務調用 –

+1

創建此測試方法的單元測試我認爲你的問題的答案在這裏 http://stackoverflow.com/questions/9789944/how-can-i-test-a-custom-delegatinghandler- in-the-asp-net-mvc-4-web-api – syler

回答

0

我用MockHttpServer服務來模擬HttpWebRequest請求和響應。因此,我將能夠單元測試我的代碼,而無需創建用於創建HttpWebReqeust的提取工廠。以下是使用MockHttpService的單元測試代碼。

MockHttpService.

Additional References

[Test] 
    public void Http_Transport_ExportPG_Order() 
    { 
     var port = GetFreeTcpPort(); 
     var url = string.Format("http://localhost:{0}/api/ifs/import", port); 
     .................... 

     using (new MockServer(port, "api/ifs/import", (req, rsp, prm) => "Result Body")) 
     { 
      Wait.For<ExportDispatched>(() => 
       Bus.Raise(new PutawayPlacedConfirmed(1, 2, 3)), null); 
     } 
    }