نوشتن phpunit test

سلام

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

تغییر تگ های یک فایل با php

یه ربات نوشتم و انداختمش به جون چندتا وبسایت موزیک و دیتا هاشون رو می کشم بیرون … البته ظاهر قضیه ایراد داره چون اصولی نیست و شرعی و حلال نیست (خنده ) ولی خب از انجام این کار لذت بردم .

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

getId3 : این اکستنشن پی اچ پی به شما کمک میکنه تگ های یک فایل رو ویرایش کنین . ادرس گیت هاب اون اینجاست.

یه نمونه کد که خودم نوشتم رو قرار میدم .یه کمی دقت کنید می فهمید داستان چیه

وارد صفحه گیت هاب بشین تا هم نمونه کد بیشتر و هم توضیحات بیشتری ببنید

پی نوشت : گیت هاب هم به مایکروسافت فروخته شد (بیچاره برنامه نویس ها )

پی نوشت دوم : تگ فایل همون اطلاعات فایل هستش مثلا داخل یه فایل mp3 تگ سال و عنوان و متن اهنگ و … وجود داره

پی نوشت سوم : به سرم زد متن اهنگ ها رو هم با همین تغییر تگ روی فایل اضافه کنم …باید جالب باشه

اشتراک لوکال هاست در شبکه

در صورتی که توی یه شرکتی هستین و میخواید یه سایت رو فقط واسه شرکتتون نمایش بدین یا اینکه می خواید یه دمو از سایت رو به مدیرتون روی سیستم خودش نشون بدید باید لوکال هاستتون (به صورت تخصصی وب سرور داخلی تون ) رو با دیگران به اشتراک بزارین

این کار خیلی ساده است . در صورتی که از ویندوز استفاده می کنین از با دستور ipconfig  توی cmd (دکمه پنجره و R رو فشار بدید و بعد توی باکس مورد نظر بنویسید cmd  تا وارد محیط cmd  بشید) ip شبکه خودتون رو بدست بیارید …باید چیزی باشه شبیه 192.168.1.68 .

در صورتی هم که از لینوکس یا شایدم مک ( روی مک تست نکردم ولی چون تقریبا شبیه لینوکسه پس اصولا باید جواب بده )  استفاده می کنید توی بش یا ترمینال بزنید ifconfig تا ip شبکه رو بدست بیارید …باید چیزی شبیه 192.168.1.68 باشه

حالا برید روی سیستم دیگه ..دقت کنید که باید سیستم ها از طریق کابل شبکه باشن یا روی یک روتر باشن … مثلا همگی به مودم وایرلس وصل باشن … توی مرورگر ای پی شبکه سیستم خودتو رو بزنید مثلا 192.168.1.68 … حالا می بینید که لوکال هاستتون رو می بنید .

به همین راحتی … در صورتی که از ویندوز و ومپ استفاده میکنید …گوشه سمت راست پایین روی ایکن ومپ راست کلیک کنید و put online  رو بزنید.

اگرم میخواید روی دومین خاصی لوکال هاستتون رو ست کنید … واسه ویندوز توی فایل hosts … و توی لینوکس هم توی /etc/hosts ادرستون رو وارد کنید .

پی نوشت : نمیدونم hosts توی ویندوز کجاست

پی نوشت دوم : توی فایل hosts یه نمونه هست از روی اون کپی کنین … مثلا اینجوری میشه 192.168.1.68   mysite.local

بستن تک پی اچ پی یا نه

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

منبع : سایت پی اچ پی