c#中http web请求和响应的单元测试

本文关键字:响应 单元测试 求和 请求 http web | 更新日期: 2023-09-27 17:54:02

我想写一个http web请求和响应方法的单元测试。请找到下面的方法

 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);
        }

我不知道如何为web请求方法编写单元测试。谁能建议如何为上述方法编写单元测试?

c#中http web请求和响应的单元测试

对于单元测试,您通常必须使用依赖注入并且依赖于接口而不是具体的类。如果你不想模拟服务器(它在托管构建机器上并不可靠),创建并注入一个模拟HttpWebRequest。如果您对NuGet包不感兴趣,您可以自己创建一个接口,其中包含代码中需要使用的方法,创建一个简单包装HttpWebRequest的生产实现,并创建第二个用于单元测试的实现,该实现仅提供预期的响应。这允许您在不设置服务器的情况下对客户机进行单元测试。

这是一个SO帖子,解释了如何使用Moq。

您需要指定您想要测试的内容。

您的方法的一个示例单元测试看起来像这样:

[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));
   }
}

我建议你看一下一些单元测试的基础知识。

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