Wie kann ich Async-Ausnahmen mit System.Net.Http.HttpClient mit meinen Integrationstests behandeln?

8

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:

%Vor%

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:

  1. Verwendet HttpWebRequest / HttpWebResponse für dieses Szenario besser?
  2. Auch wenn dies der Fall ist, wie können Sie HttpClient am besten so handhaben, dass Fehler bei asynchron gestarteten Anfragen behandelt werden?
Brandon Linton 22.05.2012, 21:42
quelle

2 Antworten

3

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: Ссылка

    
Micah Zoltu 21.09.2013 19:09
quelle
1

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:

%Vor%

Die Verwendung von async Task in der Methodensignatur und dann await bei asynchronen Aufrufen ist der beste Weg, diese Art von Tests auszuführen.

    
Brandon Linton 14.11.2014 21:24
quelle