Bra*_*ton 9 c# unit-testing asynchronous dotnet-httpclient
我正在运行一套使用的集成测试System.Net.HttpClient
.这些测试中的大多数"行为"部分都使用这种通用格式:
// Arrange
// Do some stuff
// Act
var download = _client
.GetStringAsync(testUrl)
.Result;
// Assert
// Does "download" contain what I expected?
Run Code Online (Sandbox Code Playgroud)
但是,间歇性地运行这些测试会产生如下所示:
System.AggregateException : One or more errors occurred.
----> System.Threading.Tasks.TaskCanceledException : A task was canceled.
at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
at System.Threading.Tasks.Task`1.get_Result()
Run Code Online (Sandbox Code Playgroud)
我意识到使用HttpClient
是用于启动异步的东西,并不适合我们总是告诉它等待的集成测试场景.所以这引出了两个有些相关的问题:
HttpWebRequest
/ HttpWebResponse
更适合此方案?HttpClient
,处理异常启动的请求错误的最佳方法是什么?正如之前的评论者所建议的,您的连接可能超时。_client.Timeout = timeoutInMilliseconds
您可以在进行 GetStringAsync 调用之前设置超时。但是,如果当前是默认值(100 秒),那么我的猜测是,当发生这种情况时,您正在测试的远程服务器实际上已关闭。
有关超时属性的更多信息,请访问:http://msdn.microsoft.com/en-us/library/system.net.http.httpclient.timeout.aspx
归档时间: |
|
查看次数: |
8521 次 |
最近记录: |