تكرار السؤال: …
الإجابة المختصرة
تنشئ خادماً تجريبياً في الذاكرة (TestServer) يشغل كامل خط أنابيب التطبيق الحقيقي ويوفر عميل HttpClient لإرسال الطلبات وفحص الاستجابات بدقة.
الشرح
حزمة Microsoft.AspNetCore.Mvc.Testing توفر أداة WebApplicationFactory الأكثر شيوعًا في اختبارات الـ Integration. تقوم بإقلاع ملف Program.cs الفعلي، وتشغيل كل الـ Middlewares والـ Routing والمصادقة، مع إمكانية استبدال خدمات محددة (مثل استبدال قاعدة البيانات بـ Testcontainers أو InMemory) عبر WithWebHostBuilder.
مثال بالكود
public class ApiTests(WebApplicationFactory<Program> factory) : IClassFixture<WebApplicationFactory<Program>> {
private readonly HttpClient _client = factory.CreateClient();
[Fact]
public async Task Health_ReturnsOk() {
var res = await _client.GetAsync("/health");
Assert.Equal(HttpStatusCode.OK, res.StatusCode);
}
}أخطاء شائعة
- نسيان جعل فئة Program عامة public partial class Program { } في مشاريع الـ Top-level statements حتى يتمكن مشروع الاختبار من رؤيتها.