Integration Testing چیست؟
تست تعامل واقعی چند مؤلفه (مثلاً API و دیتابیس واقعی) با هم، برخلاف Unit Test که هر واحد را کاملاً مجزا بررسی میکند.
چرا مهم است؟
خیلی از باگها دقیقاً در نقطه اتصال بین لایهها رخ میدهند (مثلاً EF Core با SQL واقعی، یا کل Middleware Pipeline)؛ Unit Test که وابستگیها را Mock میکند این دسته باگها را نشان نمیدهد.
تعریف
Integration Test رفتار چند مؤلفه واقعی را با هم بررسی میکند (مثلاً Controller + Middleware + دیتابیس)، برخلاف Unit Test که وابستگیها را با Mock جایگزین میکند.
مثال با WebApplicationFactory
public class OrdersApiTests : IClassFixture<WebApplicationFactory<Program>>
{
private readonly HttpClient _client;
public OrdersApiTests(WebApplicationFactory<Program> factory)
=> _client = factory.CreateClient();
[Fact]
public async Task GetOrders_ReturnsOk()
{
var response = await _client.GetAsync("/api/orders");
response.EnsureSuccessStatusCode();
}
}
نکات مهم
- معمولاً از یک دیتابیس واقعی اما ایزوله (مثلاً با Testcontainers) استفاده میشود، نه فقط Mock.
- طبق هرم تست (Test Pyramid) باید تعداد Integration Test از Unit Test کمتر باشد، چون کندتر اجرا میشود.
اشتباه رایج
❌ جایگزینکردن کامل Unit Test با Integration Test — کندشدن اجرای کل مجموعه تست در هر Commit و کاهش سرعت بازخورد.
منبع و مطالعه بیشتر
خلاصه
Integration Test چند مؤلفه واقعی (API، دیتابیس، Middleware) را با هم تست میکند، نه یک متد مجزا. طبق هرم تست باید تعداد آن از Unit Test کمتر باشد چون کندتر اجرا میشود. مرجع کامل: Microsoft Learn.
