Tôi đang viết một số mã gọi một dịch vụ web, đọc lại phản hồi và thực hiện điều gì đó với nó. Mã của tôi trông danh nghĩa như thế này:Kiểm tra đơn vị các yêu cầu HTTP trong C#
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));
}
Các bộ phận duy nhất mà tôi đang thực sự làm bất kỳ thao tác tùy chỉnh là trong ExtractResponse
và CreateHttpBody
phương pháp. Tuy nhiên nó cảm thấy sai để chỉ đơn vị kiểm tra những phương pháp đó, và hy vọng rằng phần còn lại của mã đến với nhau một cách chính xác. Có cách nào tôi có thể đánh chặn yêu cầu HTTP và thay vào đó cung cấp dữ liệu giả lập không?
EDIT Thông tin này hiện đã lỗi thời. Việc xây dựng loại mã này dễ dàng hơn bằng cách sử dụng các thư viện System.Net.Http.HttpClient.
Bạn có thể thiết lập một _ (misbehaving, hoặc bất cứ điều gì bạn muốn kiểm tra) _ webserver và sau đó sửa đổi các tập tin '\ Windows \ System32 \ drivers \ etc \ hosts' để" chuyển hướng "yêu cầu đến máy chủ đó. – ordag
Liên quan: https://stackoverflow.com/q/9823039/12484 –