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请求方法编写单元测试。谁能建议如何为上述方法编写单元测试?
对于单元测试,您通常必须使用依赖注入并且依赖于接口而不是具体的类。如果你不想模拟服务器(它在托管构建机器上并不可靠),创建并注入一个模拟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