System.Net.HttpClient
'u kullanan bir bütünleştirme testleri paketi çalıştırıyorum. şeyleri başlıyor içindir ben HttpClient
kullanarak fark ettinEntegrasyon testleri ile System.Net.Http.HttpClient kullanarak uyumsuzluk istisnalarını nasıl ele alabilirim?
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()
: aralıklı böyle bir şey verir bu testleri, Ancak
// Arrange
// Do some stuff
// Act
var download = _client
.GetStringAsync(testUrl)
.Result;
// Assert
// Does "download" contain what I expected?
: Bu testlerde bizim "davranış" bölümlerinin çoğu bu genel biçimi kullanın Async ve hep beklediğimizi söylediğimiz entegrasyon testi senaryolarımız için mükemmel bir uyum değildir. Yani bu biraz ilişkilidir iki soruya götürüyor:
- Bu senaryo için daha uygun
HttpWebRequest
/HttpWebResponse
kullanıyor mu? - Öyle olsa bile, eşzamansız olarak başlatılan isteklerin hatalarını işlemek için
HttpClient
ile çalışmanın en iyi yolu nedir?
Başlamak için neden asenkronize olarak yapıyorsunuz? Eşzamanlı olarak yapmak isteyeceksin gibi görünüyor ... bu yüzden 1 numaralı soruya evet diyebilirim. Soru 2 için, belirli bir zaman diliminde yanıt vermeyi sınamanız gerekmedikçe, HttpClient sınıfının "Zaman Aşımı" özelliğini artırabilirim. Her iki durumda da, uyumsuzluğun neden birim testi için daha uygun olduğuna emin değilim ... – Tom
Httpclient sadece uyumsuz yöntemleri sağlar. OP, görevdeki Sonucu çağırarak bunları senkronize çağrılara doğru şekilde dönüştürür. Bu da kesinlikle konuşma, bunun bir async istisnası olmadığı anlamına gelir, "Sonuç" da engellendikten sonra atılan senkron bir istisnadır. Zaman aşımını – aL3891