2016-07-01 5 views
0

Ich möchte einen Komponententest für HTTP-Web-Anfrage und Antwort-Methode schreiben. Sie finden die folgenden Verfahren,Komponententest für HTTP-Web-Anfrage und Antwort in C#

public string GetEmployeeId() 
     { 

       var tokenRequest = (HttpWebRequest)WebRequest.Create("http://www.goggle.com"); 
       tokenRequest.Method = "POST"; 
       tokenRequest.ContentType = "application/x-www-form-urlencoded"; 

       var bytes = Encoding.UTF8.GetBytes(GetKeys(credentials)); 
       tokenRequest.ContentLength = bytes.Length; 

       Response response; 
       using (var stream = tokenRequest.GetRequestStream()) 
        { 
         stream.Write(bytes, 0, bytes.Length); 
         stream.Flush(); 

         using (var webResponse = request.GetResponse()) 
         { 
          Stream receiveStream = webResponse.GetResponseStream(); 
          StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8); 
          MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(readStream.ReadToEnd())); 
          DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Response)); 
          response = ser.ReadObject(ms) as Response; 
          ms.Close(); 
          readStream.Close(); 
         } 
        } 
       } 
      return response.Id; 

     } 

    private string GetKeys(Credentials credentials) 
     { 
      return String.Format(@"client_id={0}&client_secret={1}&grant_type=client_credentials", 
           credentials.Id, credentials.Secret); 
     } 

Ich weiß nicht, wie Unit-Test für Web-Anfrage zu schreiben methods.Can jemand empfehlen, wie Unit-Test für das obige Verfahren zu schreiben?

Antwort

0

Sie müssen angeben, was Sie testen möchten.

Ein Beispiel Unit-Test für Ihre Methode wie folgt aussehen würde:

[TestClass] 
public class WebUnitTests 
{ 
    [TestMethod] 
    public void Can_Request_Employee_Id() 
    { 
     // Arrange 
     YourHttpRequestClass c = new YourHttpRequestClass(); 
     var employeeId = c.GetEmployeeId(); 

     // Assert 
     Assert.IsFalse(string.IsNullOrEmpty(employeeId)); 

    } 
} 

empfehle ich Ihnen an einigen Unit-Tests Grundlagen einen Blick.

https://msdn.microsoft.com/en-us/library/hh694602.aspx

0

mit Unit-Tests haben Sie oft Dependency Injection und stützen sich auf Schnittstellen, anstatt konkrete Klassen zu verwenden. Wenn Sie den Server, der auf gehosteten Build-Computern sowieso nicht zuverlässig funktioniert, nicht verspotten möchten, erstellen und injizieren Sie eine Mock-HttpWebRequest. Wenn Sie kein Interesse an NuGet-Paketen haben, können Sie dies selbst tun, indem Sie eine Schnittstelle erstellen, die die Methoden enthält, die Sie in Ihrem Code verwenden müssen, indem Sie eine Produktionsimplementierung erstellen, die HttpWebRequest umschließt und eine zweite Implementierung für Komponententests erstellt eine erwartete Antwort. Auf diese Weise können Sie den Client testen, ohne einen Server einzurichten.

Here is a SO post das erklärt, es mit Moq tun.

Verwandte Themen