我在写一些调用Web服务的代码,回读响应并执行一些操作。我的代码如下名义上是这样的:在c#中测试HTTP请求的单元测试#
string body = CreateHttpBody(regularExpression, strategy);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(_url);
request.Method = "POST";
request.ContentType = "text/plain; charset=utf-8";
using (Stream requestStream = request.GetRequestStream())
{
requestStream.Write(Encoding.UTF8.GetBytes(body), 0, body.Length);
requestStream.Flush();
}
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
byte[] data = new byte[response.ContentLength];
using (Stream stream = response.GetResponseStream())
{
int bytesRead = 0;
while (bytesRead < data.Length)
{
bytesRead += stream.Read(data, bytesRead, data.Length - bytesRead);
}
}
return ExtractResponse(Encoding.UTF8.GetString(data));
}
在那里我实际上做任何自定义操作的唯一部件是在ExtractResponse
和CreateHttpBody
方法。然而,单元测试这些方法会让人感觉不对,并希望其他代码能够正确地结合在一起。有什么办法可以拦截HTTP请求并反馈给模拟数据吗?
编辑该信息现在已过时。使用System.Net.Http.HttpClient库来构造这种代码要容易得多。
你可以设置一个_(行为不当,或者你想测试的任何东西)_webserver,然后修改'\ Windows \ System32 \ drivers \ etc \ hosts'文件以将请求重定向到该服务器。 – ordag 2012-02-01 12:32:28
相关:https://stackoverflow.com/q/9823039/12484 – 2017-08-30 16:54:59