2016-12-16 19 views
0

HTTP POST要求でxmlとしてエクスポートする必要があります。これは以下のコードで行われます。問題は私が模擬HTTPリクエストで単体テストを作りたいということです。このユニットテストで私の体を助けることができますか?HttpWebRequestを嘲笑してHTTP POSTリクエストを使ってメソッドをユニットテストする

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サービスコールを模擬してこのメ​​ソッドのunittestを作成する必要があります –

+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); 
     } 
    } 
関連する問題