CodeShot
Midسختی 2 از ۵· در 90٪ مصاحبه‌های این حوزه پرسیده شده

تفاوت تست واحد (Unit Test) و تست یکپارچگی (Integration Test) چیست؟

نشان کردن

پاسخ کوتاه

تست واحد یک متد را مجزا از وابستگی‌های بیرونی (با Mock) بررسی می‌کند؛ تست یکپارچگی چند جزء واقعی (مثل دیتابیس واقعی) را با هم تست می‌کند.

پاسخ کامل

تست واحد سریع است و می‌تواند صدها بار در دقیقه اجرا شود چون هیچ I/O واقعی (دیتابیس، شبکه) ندارد. تست یکپارچگی کندتر است اما اطمینان بیشتری می‌دهد که اجزا واقعاً با هم درست کار می‌کنند (مثلاً Testcontainers برای دیتابیس واقعی در Docker).

مثال کد

// Unit Test: Repository واقعی جایگزین Mock می‌شود
[Fact]
public void GetOrder_ValidId_ReturnsOrder()
{
    var mock = new Mock<IOrderRepository>();
    mock.Setup(r => r.GetById(1)).Returns(new Order { Id = 1 });
    var service = new OrderService(mock.Object);
    Assert.NotNull(service.GetOrder(1));
}

نکته مهم

تست‌های سالم معمولاً هرم دارند: تعداد زیاد تست واحد در پایه، تست یکپارچگی کمتر، تست End-to-End خیلی کم در راس.

اشتباه رایج

❌ نوشتن فقط تست یکپارچگی و صرف‌نظر از تست واحد سریع (باعث اجرای کند کل مجموعه تست می‌شود).