我有以下静态类,它有一个我用于fire的发送方法,忘记异步http调用。
public static class AsyncHttpRequest
{
public static void Send(string url)
{
//perform an async get on the url
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.KeepAlive = false;
ThreadPool.QueueUserWorkItem(
o =>
{
var response = request.GetResponse();
response.Close();
});
}
catch (Exception ex)
{
Errors.ErrorSignal.SignalError(ex);
}
}
}
从Web应用程序项目调用相同的URL非常有效。但是从单元测试项目调用相同的URL不起作用。它没有调用URL。我查了提琴手。那是为什么?
在这两种情况下,我都这样称呼 -
AsyncHttpRequest.Send("http://example.com");
答案 0 :(得分:0)
从Web应用程序项目调用相同的URL非常有效。但是从单元测试项目调用相同的URL不起作用。它没有调用URL。我查了提琴手。那是为什么?
因为单元测试框架可以快速处理所有内容。您需要在退出单元测试之前等待。
[TestMethod]
public void TestMethod()
{
ManualResetEvent evt = new ManualResetEvent(false);
AsyncHttpRequest.Send("someUrl", x => evt.Set());
Assert.True(evt.Wait(100));
}
和班级
public static class AsyncHttpRequest
{
public static void Send(string url)
{
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.KeepAlive = false;
ThreadPool.QueueUserWorkItem(
o =>
{
var response = request.GetResponse();
response.Close();
});
}
catch (Exception ex)
{
Errors.ErrorSignal.SignalError(ex);
}
}
public static void Send(string url, Action<HttpWebResponse> callback)
{
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.KeepAlive = false;
ThreadPool.QueueUserWorkItem(
o =>
{
var response = request.GetResponse();
callback(response)
response.Close();
});
}
catch (Exception ex)
{
Errors.ErrorSignal.SignalError(ex);
}
}
}