آموزش Unit Test در Golang

سلام به همه دوستداران زبان Golang در این مقاله قصد داریم اول در مورد unit test و ویژگی های که یک unit test باید داشته باشد صحبت کنیم و بعدش هم با مثال آموزش را جلو ببریم.

اول از همه unit test چیست؟ یک unit test کوچکترین قسمت قابل آزمایش یک برنامه نرم‌افزاری است. معمولاً یک function یا مجموعه کوچکی از function ها است که وظیفه خاصی را انجام می‌دهد. unit test برای اطمینان از عملکرد صحیح کد و مطابقت آن با الزامات برنامه استفاده می‌شوند.

ویژگی هایی که یک unit test باید داشته باشد

-نباید با هیچ دیتابیسی ارتباط داشته باشد.

-نباید احتیاج داشته باشد به اینترنت متصل باشد.

-نباید احتیاج باشد به فایل های داخل سیستم دسترسی پیدا کند.

-نباید احتیاج داشته باشد که همزمان با function های دیگر run شود و باید کاملا مستقل باشد.

-و در آخر باید مستقل از environment باشد.

حال با مثال باقی مواردی که نیاز است یاد بگیریم را جلو می بریم

اول از همه تصور کنید که یک فایل به نام calculator.go داریم و برای نوشتن test نیاز داریم یک فایل به نام calculator_test.go درست کنیم. دقت کنید که ساختار نام فایل حتما باید به صورت test.go_* باشد تا go قادر به تشخیص آن باشد.

برای نوشتن function تست باید اسم function با Test شروع شود و طبق کتاب قانون های نانوشته بهتره باقی اسم مانند اسم function که میخواهیم تست کنیم باشد :))) مثلا function که میخواهیم تست کنیم نامش divide است و نام function تست TestDivide است.

قدم بعدی import کردن "testing" که package داخلی خود golang که قراره خیلی کمکمون کنه.

ساختار function تست

قاعدتا function تست از سه بخش تشکیل میشود

بخش یک arrange که تعریف تمام چیزهایی که برای اجرای تابع به آن نیاز دارید و تعریف نتیجه ای که میخواهیم تست داشته باشد .

بخش دو act که جایی که می‌خواهید قابلیتی که قصد آزمایش آن را دارید را فراخوانی کنید.

و بخش سه assert که در جایی که شما صحت خروجی واقعی تابع خود را با خروجی مورد انتظار مقایسه می‌کنید.

sorry for bad editing :)
sorry for bad editing :)

ممنون که تا اینجا همراه من بودید و حالا وقت اجرا تستمون هستش

برای اجرا تست آسون ترین راه Run کردن دستور"go test calculator" است که calculator همان directory است که فایل تست در آن است. البته میتوانیم با استفاده از flag -v اطلاعتی همچو کدام تست اجرا شده است هم ببینیم و با استفاده از flag –cover می توانیم متوجه شویم چند درصد از کد با استفاده از تست کاور شده و تست شده.

testing options
testing options

تا اینجا کار base کار رو یاد گرفتیم و در ادامه اینکه یک تست حرفه ای واقعا چجوری باشه رو بررسی میکنیم

به روشی که در ادامه قراره به اون بپردازیم می گوییم parameterized testing که در آن به جای هر چیزی که قابل تغییر مثل عدد expect یا اعداد تستمون را داخل یک slice میریزم و از آن استفاده میکنیم و با استفاده از t.Run که برای package testing هست کد را اجرا میکنیم.

parameterized testing
parameterized testing

همان طور که مشاهده میکنید میتوانیم چند نوع تست را با یک function انجام دهیم.

ممنون که این آموزش را تا آخر خوندید و میخواهم به عنوان تشکر testify را به شما معرفی کنم که میشه گفت بهترین framework در زمینه تست است و حتما بهتون پیشنهاد میکنم یاد بگیرید. 3>