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

چرا در تست واحد از Mock استفاده می‌کنیم؟

نشان کردن

پاسخ کوتاه

برای جدا کردن واحد تحت تست از وابستگی‌های واقعی (دیتابیس، سرویس خارجی) تا تست سریع، پایدار و تکرارپذیر باشد.

پاسخ کامل

اگر یک تست مستقیم به دیتابیس واقعی وصل شود، سرعت آن کند می‌شود و نتیجه‌اش به وضعیت آن دیتابیس (داده‌های موجود، اتصال شبکه) وابسته می‌شود. با Mock کردن IRepository، رفتار دیتابیس را شبیه‌سازی می‌کنیم و فقط منطق کلاس تحت تست را بررسی می‌کنیم.

مثال کد

var mock = new Mock<IEmailSender>();
mock.Setup(s => s.SendAsync(It.IsAny<string>())).Returns(Task.CompletedTask);

نکته مهم

کتابخانه‌های رایج Mock در .NET: Moq و NSubstitute.

اشتباه رایج

❌ Mock کردن بیش‌ازحد جزئیات داخلی، طوری که تست به پیاده‌سازی وابسته می‌شود نه رفتار.