मैं एकीकरण परीक्षणों का एक सूट चला रहा हूं जो System.Net.HttpClient
का उपयोग करता है। इन परीक्षणों में हमारे "अधिनियम" वर्गों में से अधिकांश इस सामान्य प्रारूप का उपयोग करें:मैं अपने एकीकरण परीक्षण के साथ System.Net.Http.HttpClient का उपयोग करके async अपवाद कैसे संभाल सकता हूं?
// 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
का उपयोग कर एहसास बातें बंद लात के लिए है async और हमारे एकीकरण परीक्षण परिदृश्यों के लिए एकदम सही फिट नहीं है जहां हम हमेशा प्रतीक्षा करने के लिए कहते हैं। तो यह मुझे दो सवाल है कि कुछ हद तक जुड़े हुए हैं की ओर जाता है:
- का उपयोग कर रहा है
HttpWebRequest
/HttpWebResponse
इस परिदृश्य के लिए अधिक उपयुक्त? - भले ही यह है,
HttpClient
के साथ काम करने के लिए सबसे अच्छा तरीका क्या है, अनावश्यक रूप से बंद किए गए अनुरोधों पर त्रुटियों को संभालने के लिए?
आप इसे असंकालिक रूप से क्यों शुरू कर रहे हैं? ऐसा लगता है कि आप इसे सिंक्रनाइज़ करना चाहते हैं ... इसलिए मैं प्रश्न # 1 पर हाँ कहूंगा। प्रश्न # 2 के लिए, मैं, जब तक आप एक निश्चित समय सीमा के भीतर जवाबदेही परीक्षण की आवश्यकता HttpClient वर्ग के 'Timeout' संपत्ति में वृद्धि होगी। किसी भी तरह से, मुझे यकीन नहीं है कि एसिंक यूनिट परीक्षण के लिए बेहतर क्यों होगा ... – Tom
Httpclient केवल async विधियों को प्रदान करता है। ओपी सही ढंग से कार्य पर परिणाम कॉल करके सिंक्रोनस कॉल में परिवर्तित कर रहा है। यह भी कड़ाई से बोलने का मतलब है कि यह एक async अपवाद नहीं है, यह "परिणाम" पर अवरुद्ध करने के बाद एक सिंक्रोनस अपवाद फेंक दिया गया है। मैं टाइमआउट – aL3891