نوشتن phpunit test

سلام

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

خب با نصبش شروع می کنیم …. یه پروزه جدید درست کنید و توی دایکتوری روت پروژه این کامند رو بزنید (امیدوارم از لینوکس استفاده کنید و زیاد به گیر نخورین)

این خط کد چیکار می کنه ؟ با کامپوز یه ریکویست واسه نصب phpunit می فرستین … یه کمی زمان می بره تا نصب بشه واسه من دانلود پکیج حدود ۱۰ دقیقه زمان برد پس صبور باشین … البته سری بعد که پکیح رو از کش دانلود میکنه زودتر نصب میشه

و این هم نتیجه نصب :

خب نصب که کامل شد میریم سراغ اولین تست که خیلی هم کاربردی نیست 🙂 .

یه دایرکتوری به اسم mytest توی روت پروژه تون بسازید و بعد داخل اون دایرکتوری یه کلاس به اسم FirstTest که اکسند شده (extends) شده از \PHPUnit\Framework\TestCase بسازید . اگه نمیدونید اسکتند شدن چیه و چیکار میکنه این نوشته به درد شما نمیخوره چون باید با شی گرایی اشنا باشین  🙂 . و اینکه دقت کنین که حتما اسم کلاستون با Test تموم شده باشه

کلاس شما باید یه چیزی شبیه این باشه :

خب حالا میخوایم اولی متد به اسم test_sum رو بنویسیم … این متد دوتا عدد رو با هم جمع میکنه و تست میکنه ببینه ایا جمع دوتا عدد مثلا عدد ۱۲ میشه یا نه … کلاستون باید تا الان اینجوری باشه

نعریف متد که فک نکنم مشکلی داشته باشیم و فقط میمونه توضیح خط اخر کد. assertEquals یه متد از کلاس پدره که میاد دوتا مقدار رو بررسی میکنه که با هم برابر هستن یا نه …سه تا ارگومان میگیره اولین مقدار و دومین که همون عددها یا مقادیر قابل بررسی هستن و سومین مقدار هم که پیغامی که در صورت برابر نبودن مقدارهای اول و دوم با هم نمایش میده

نکته : متدهای تست حتما با test شروع میشن … منظورم اسمشونه .

خب بریم سراغ اولین تست . کامند لاین تون (ترمینال .و..بش یا هرچیزی که بشه توی به php cli دسترسی داشت ) رو باز کنید. و وارد روت پروژه تون بشید و این دستور رو بزنید .

نتیجه باید چیزی شبیه این باشه :

و در صورتی که عدد ۱۲ داخل کلاس رو مثلا به ۱۳ تغییر بدین خروجی چیزی شبیه این خواهد بود .

خب تا اینجا کار زیاد سختی انجام ندادیم . حالا میخوام فرضا واسه یه ماژول یا یه بخشی از سایت یه تست بنویسیم مثلا واسه استان های فروشگام تست بنویسم ببینم که وقتی یه محصولی انتخاب میشه ایا استان تهران هم جزیی از استان های قابل ارسال هستش یا نه (چقد سخت شد ولی خب در واقعیت همینجوریه) .

فرض میگیرم که پروژه من توی دایرکتوری app و اسم کلاس من هم Shipping  و یه متد داره یه اسم getRegion  که میاد و یه ارایه از شهرها رو بر می گردونه …با این توضیحات فک کنم باید بدونین که یه کلاس به اسم Shipping توی دایرکتوری app باید بسازم و با یه متد به اسم getRegion  که قرار یه ارایه از شهر ها رو برگردونه

تقریبا یه همچین چیزی میشه :

خب حالا این کلاس رو توی کلاس تست قبلی require  میکنم و بعد یه متد توی کلاس تست م می نویسم واسه تست کردن اینکه ایا تهران جزئی از مقادیر برگشتن هست یا نه .

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

خب یه متد به اسم test_region  به کلاس اضافه کردم و یه شی از کلاس Shipping ساختم و بعد هم مقدار استان ها رو از شی گرفتم … حالا با متد assertContains بررسی میکنم که استان ها شامل تهران میشن یا نه و نتیجه :

خب تا اینجای کار تقریبا اومد دستمون که یه تست چجوری کار میکنه … این فقط یک مثال خیلی ساده بود.

واسه توضیحات بیشتر به دایکیومنت خود سایت https://phpunit.de/manual/6.5/en/installation.html مراجعه کنید .

وقت کنم یه مطلب هم در مورد نوشتن تست واسه مجنتو میزارم و فایلهای پروژهphpunittest

You May Also Like

About the Author: درویشانی

برنامه نویس وب و اندروید هستم . به صورت تخصصی روی فریم ورک yii و فروشگاه ساز مجنتو کار می کنم

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *