حسین سلیمانی
حسین سلیمانی
خواندن ۲ دقیقه·۴ ماه پیش

تست زنی در سی شارپ-Test and Mock in C#

بسم الله الرحمن الرحیم

در دنیای برنامه نویسی تست نوشتن یعنی کدی بنویسیم که کد های اصلی رو تست کنه! مثلا در یک پروژه بزرگ که چندین هزار خط و ده ها فانکشن وجود داره,یک غلط املایی یا یک نا همانگی کوچیک تو یکی از بخش ها میتونه کل برنامه رو مختل کنه.برای اینکه این مشکل پیش نیاد ما تست مینویسم تا مطمعن بشیم همه بخش های برنامه اونطور که باید کار می کنن.

در دنیای برنامه نویسی ما سه نوع تست داریم :

یونت تست 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 استفاده کنیم .

https://gist.github.com/hossien014/d136953feb210abde252c65541973df5#file-gistfile1-txt

و یک کلاس logic داریم که یک فانکشن gethossien دارد که از دیتا بیس اولین یوزر را برمیگرداند.

https://gist.github.com/hossien014/6a2ae181e74914f95b592aebf00953aa


تست که مینوسیم به این شکل باید باشد

https://gist.github.com/hossien014/b42ad25dd3217cef31746f4d216cb206



سی شارپunit testتست
برنامه نویس hossien014.github.io
شاید از این پست‌ها خوشتان بیاید