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