بسم الله الرحمن الرحیم
در دنیای برنامه نویسی تست نوشتن یعنی کدی بنویسیم که کد های اصلی رو تست کنه! مثلا در یک پروژه بزرگ که چندین هزار خط و ده ها فانکشن وجود داره,یک غلط املایی یا یک نا همانگی کوچیک تو یکی از بخش ها میتونه کل برنامه رو مختل کنه.برای اینکه این مشکل پیش نیاد ما تست مینویسم تا مطمعن بشیم همه بخش های برنامه اونطور که باید کار می کنن.
در دنیای برنامه نویسی ما سه نوع تست داریم :
یونت تست unit test :به تست کردن بخش های کوچک برنامه به صورت مستقل unit test میگویند.منظورم از مستقل این هست که این دست ها به دیتا بیس و اطلاعات هارد... نباید وصل بشن و فقط منطق یک فانشکن رو تست کنن.
اینتگریشن تست integration test : تفاوت این نوع تست با unit test در استفاده از داده های خارجی است. در این نوع تست دیتا بیس و ... نیز دخلیل هستند.
تست end to end : در این نوع تست برنامه با همه وابستگی ها و رابط کاری تست می شود.
بیشترین تستی که نوشته می شود unit test و بعد از ان integration test و بعد از ان end to end تست است .
ماک Mockچیست ؟
ماک کردن یعنی ساخت یک نسخه فیک از یک فانکشن برای تست کردن.فرض کنید یک فانشکن برای تست دارید.در جایی از این فانشکن نیاز است که اطلاعاتی را از دیتا بیس فراخوانی یا دستکاری کنید.اینکار قطعا خطرناک است و ممکن است اطلاعات شما از بین برود.برای حل این مشکل ما از Mock کردن استفاده میکنیم و یک دیتا بیس فیک میسازیم و برنامه را با همان تست میکنیم.با دیدن مثال ها بهتر این مفهوم را درک خواهید کرد.
ابزار تست در سی شارپ :
من یک نرم افزار تحت وب asp .net دارم و قصد دارم چند تست برای این نرم افزار بنویسم .
ابزار انتخابی من برای اینکار xunit است و برای ماک کردن کردن من از moq استفاده میکنم.ابتدا پکیج های زیر را نصب کنید.
coverlet.collector
Microsoft.EntityFrameworkCore.InMemory
Microsoft.NET.Test.Sdk
Moq
TestEssentials.Xunit
xunit
xunit.runner.console
xunit.runner.visualstudio
فرض کنید این مدل ها و دیتا بیس کانتس شما در efcore باشد .توجه داشته باشید که DBSet ها باید به صورت virtual باشد تا بتوانیم از mock استفاده کنیم .
و یک کلاس logic داریم که یک فانکشن gethossien دارد که از دیتا بیس اولین یوزر را برمیگرداند.
تست که مینوسیم به این شکل باید باشد