آموزش تست نویسی در PHP و Laravel با PHPUnit

سلام دوستان عزیز امیدوارم حالتون خوب باشه. امروز میخوایم ببینیم تست نویسی چی هست و به چه دردی میخوره و تا یه چن جلسه که بعدش بریم تست نویسی در لاراول رو یاد بگیریم.تست نویسی چی هست اصلا؟ کدی قابل اعتماد است که خطا ندهد و عملیاتی که از آن انتظار می رود را درست انجام دهد. اگر کدی که نوشتیم یک بار در برنامه مان اجرا شد به این معنا نیست که قابل اعتماد است.خوب برای اعتماد پیدا کردن از کد خودمان چه کار کنیم کافی است برنامه مان را اجرا کنیم تا همه حالت های مختلفی که مورد نظرمان است را مورد تست قرار بدهیم. و از درست اجرا شدن کدمان اطمینان حاصل کنیم کد ما ممکن است نسبت به وضعیت سیستم و وضعیت اپلیکیشن رفتارهای متفاوتی از خود نشان دهد و مثلاً توابع مختلفی را در هر وضعیت صدا کند. مهم آن است که از درست رفتار کردن کد مان در تمام حالت ها اطمینان حاصل کنیم تا مطمئن شویم که کدمان درست اجرا می شود. منبع خب اگر که تا الان یه پیش زمینه ای راجع به تست نویسی فهمیدین که خداروشکر. اگر نه پیشنهاد میکنم برید و مطلب لینک شده بالا رو بخونید.شروع تست نویسی در PHPبرای شروع نرم افزار VScode رو باز میکنم. من به چی نیاز دارم؟یه پروژه جدید درست میکنیم به اسم PHPUnit الان من باید کامپوزر رو توی این برنامم به کار ببرم پس باید یه فایل composer.json رو بسازم و توش اینو قرار بدم{&quotautoload&quot: {&quotpsr-4&quot: {}}}خب این الان فرمت استاندارد فایل کامپوزر هست. خیلی لازم نیست بدونین حالا این چیکار میکنه یا دقیقا چیه ولی اگه خیلی مشتاقین میتونین به اموزش قبلی من در این لینک ببینین که این چیکار میکنه.خیلی خب حالا لازمه که توی ترمینال یا CMD بیاین و وارد همین پوشه بشین و این دستور نصب کامپوزر رو بزنین (اگه که کامپوزر رو نصب ندارین اول لازم هست که اون رو از سایتش دانلود کنین)composer installخب حالا پیامی میاد و شروع میکنه اضافه کردن پوشه های مورد نیاز. الان کامپوزر نصب شد خیلیم عالی! حالا باید چیکار کنم؟ :lنصب PHPUnit در کامپوزرشما با استفاده از کامپوزر میتونین پکیج های مورد نیازتونو نصب کنین و ما الان نیازمند پکیج PHPUnit هستیم. خب میایم و این دستور رو وارد میکنیم composer require phpunit/phpunit --devخیلی خب حالا شروع میکنه نصب PHPUnit و نیازمندی هاش. خیلیم عالی. ولی اقای فلانی شما تا اینجا فقط نصبش کردین. اموزشش چی؟بریم سراغ اموزش کار با این پکیج PHPUnitصبر کنین ما هنوز یسری کارای نصبشو نکردیم!! بیاید اول کارای باقی مونده رو انجام بدیم. انقد عجله نکنیم.ما باید یه فایل phpunit.xml بسازیم. ساخت این فایل لازمه و این فایل هست که به پکیج ما اطلاعات میده. پس حتما یادتون باشه ساختش این مقادیر رو داخلش قرار بدین تا یه توضیحی بدیم در بارش<?xml version=&quot1.0&quot encoding=&quotUTF-8&quot?><phpunit bootstrap=&quotvendor/autoload.php&quotcolors=&quottrue&quot verbose=&quottrue&quot stopOnFailure=&quottrue&quot><testsuites><testsuite name=&quotunit&quot><directory>tests</directory></testsuite></testsuites></phpunit>خب اینا چی میگن؟ این فرمت استاندارد Xml هست و اطلاعات رو به پکیج ما میده. اول از همه میگیم ادرس فایل های نگه دارنده کجاس؟ توی تگ <phpunit> میایم میگیم ادرسش توی vendor و فایل autoload هست. همه فایل های ما از اینجا لود میشن.تگ testsuites هم ریشه همه تست های ماست. تگ testsuite هم مختص فقط به یک نوع تست هست که ما این رو با اتریبیوت name مشخص میکنیم. که خب ما گفتیم باید unit باشه.خیلی خب داخل تگ testsuite باید تگ directory بزاریم و ادرس پوشه ای که داخلش تست ها قرار میگیره.خیلی خب حالا ما باید پوشه فایل های تست رو مشخص کنیم. حالا باید یه پوشه Tests بسازیم و داخلش هم یه پوشه unit بسازیم.داخل پوشه unit باید فایل های تست مون قرار بگیره.ایندفعه جدی جدی میریم برای نوشتن تست :)خب حالا باید یک فایل ایجاد کنیم داخل پوشه های تست مون. اسمش رو چی بزاریم؟ من میزارم TestExample.phpباید فایل های تست حتما دارای Test اول اسمشون باشن. وگرنه به عنوان فایل تست قبول نمیشنداخل فایل تست که ساختیم میام این رو مینویسم:<?phpuse PHPUnit\Framework\TestCase;class TestExample extends TestCase{}خب این کد که نیاز به توضیح خاصی نداره.حالا میایم و یه فانکشن تست داخلش مینویسیم:<?phpuse PHPUnit\Framework\TestCase;class TestExample extends TestCase{public function test_example_assert_true(){$this->assertTrue(true);}}خب این تابعی که نوشتیم یعنی چی؟ ما یه تابع نوشتیم و داخلش گفتیم از شی جاری متود assertTrue رو صدا بزن و بهش true رو پاس دادیم. میاد چیکار میکنه؟ این تابع میاد برابر با مقدار true قرار میده. یعنی ما میایم مقدار true رو برابر true قرار میدیم و این جوابش چی میشه؟ میشه true یعنی تست درست هست. میایم و تست رو فراخوانی میکنیم تا اجرا بشهتوی همون پوشه توی cmd باید بنویسیمvendor\bin\phpunit تا بره و تست هارو اجرا کنه!و تمام!PS F:\wampp\www\SpotifyLogin\PHPUnit> vendor\bin\phpunitPHPUnit 8.5.0 by Sebastian Bergmann and contributors.Runtime: PHP 7.2.18Configuration: F:\wampp\www\SpotifyLogin\PHPUnit\phpunit.xml. 1 / 1 (100%)Time: 103 ms, Memory: 4.00 MBOK (1 test, 1 assertion)تست با موفقیت انجام شد! این قسمت اول از اموزش تست نویسی بود امیدوارم مورد توجهتون بوده باشه.