Я запускаю набор интеграционных тестов, в которых используется System.Net.HttpClient
. Большинство наших разделов «действия» в этих тестах используют этот общий формат:
// Arrange
// Do some stuff
// Act
var download = _client
.GetStringAsync(testUrl)
.Result;
// Assert
// Does "download" contain what I expected?
Однако периодический запуск этих тестов дает что-то вроде этого:
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()
Я понимаю, что использование HttpClient
предназначено для асинхронного запуска и не идеально подходит для наших сценариев интеграционного тестирования, где мы всегда говорим ему подождать. Итак, это приводит меня к двум вопросам, которые в некоторой степени связаны:
- Является ли использование
HttpWebRequest
/HttpWebResponse
более подходящим для этого сценария? - Даже если это так, как лучше всего работать с
HttpClient
для обработки ошибок в запросах, запущенных асинхронно?
Timeout
класса HttpClient, если только вам не нужно проверять реакцию в течение определенного периода времени. В любом случае, я не уверен, почему асинхронность лучше подходит для модульного тестирования... - person Tom   schedule 23.05.2012