تكرار السؤال: …
الإجابة المختصرة
باستبدال معالج الرسائل الأساسي (HttpMessageHandler) بمعالج وهمي يعترض استدعاء SendAsync ويرجع استجابة HttpResponseMessage محددة مسبقاً.
الشرح
فئة HttpClient لا تمتلك دوالاً افتراضية لتطبيق Mock عليها مباشرة. الطريقة المعمارية الرسمية لاختبارها هي استبدال المعالج الداخلي HttpMessageHandler بفئة وهمية مخصصة (أو باستخدام مكتبة RichardSzalay.MockHttp). يقوم هذا المعالج باعتراض الطلب وفحص الروابط والترويسات وإرجاع كود الحالة والـ JSON المتوقع دون لمس شبكة الإنترنت إطلاقاً.
مثال بالكود
using RichardSzalay.MockHttp;
var handler = new MockHttpMessageHandler();
handler.When("https://api.github.com/users/*")
.Respond("application/json", "{\"name\":\"octocat\"}");
var client = new HttpClient(handler);
var service = new GitHubService(client);
var result = await service.GetUserNameAsync("octocat");
Assert.Equal("octocat", result);أخطاء شائعة
- استدعاء خوادم إنترنت حقيقية في اختبارات الوحدة مما يجعلها تفشل عند انقطاع الشبكة أو بطء الخادم الخارجي.