Ich führe eine Reihe von Integrationstests durch, die System.Net.HttpClient
verwenden. Die meisten unserer "act" -Abschnitte in diesen Tests verwenden dieses allgemeine Format:
Wenn Sie diese Tests jedoch mit Unterbrechungen ausführen, erhalten Sie ungefähr Folgendes:
%Vor% Ich weiß, dass die Verwendung von HttpClient
dazu gedacht ist, Dinge asynchron zu machen und passt nicht perfekt zu unseren Integrationstest-Szenarien, in denen wir immer darauf warten, dass sie warten. Das führt mich zu zwei Fragen, die etwas miteinander verwandt sind:
HttpWebRequest
/ HttpWebResponse
für dieses Szenario besser? HttpClient
am besten so handhaben, dass Fehler bei asynchron gestarteten Anfragen behandelt werden? Wie die vorherigen Kommentatoren vorgeschlagen haben, ist Ihre Verbindung wahrscheinlich zeitlich begrenzt. Sie können das Zeitlimit mit _client.Timeout = timeoutInMilliseconds
festlegen, bevor Sie den GetStringAsync-Aufruf ausführen. Wenn es jedoch derzeit der Standard (100 Sekunden) ist, dann ist meine Vermutung, dass der Remote-Server, gegen den Sie testen, tatsächlich inaktiv ist, wenn dies auftritt.
Weitere Informationen zur Timeout-Eigenschaft finden Sie unter: Ссылка
System.AggregateException
stammt von Ausnahmen, die in einer Task auftreten, die synchron ausgeführt wird. Async-Tests erlauben es dem Runner (in meinem Fall NUnit), die Aufgabe zu zerlegen und die echte Ausnahme zu bekommen. Wie der obige Code hätte aussehen sollen, ist dies:
Die Verwendung von async Task
in der Methodensignatur und dann await
bei asynchronen Aufrufen ist der beste Weg, diese Art von Tests auszuführen.
Tags und Links c# unit-testing asynchronous dotnet-httpclient