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 کردن بیش‌ازحد جزئیات داخلی، طوری که تست به پیاده‌سازی وابسته می‌شود نه رفتار.