آموزش تست نویسی در PHP و Laravel با PHPUnit
![](https://files.virgool.io/upload/users/45428/posts/qumqz9efuuwu/8wkehvu9u5tv.png)
سلام دوستان عزیز امیدوارم حالتون خوب باشه. امروز میخوایم ببینیم تست نویسی چی هست و به چه دردی میخوره و تا یه چن جلسه که بعدش بریم تست نویسی در لاراول رو یاد بگیریم.
تست نویسی چی هست اصلا؟
کدی قابل اعتماد است که خطا ندهد و عملیاتی که از آن انتظار می رود را درست انجام دهد. اگر کدی که نوشتیم یک بار در برنامه مان اجرا شد به این معنا نیست که قابل اعتماد است.خوب برای اعتماد پیدا کردن از کد خودمان چه کار کنیم کافی است برنامه مان را اجرا کنیم تا همه حالت های مختلفی که مورد نظرمان است را مورد تست قرار بدهیم. و از درست اجرا شدن کدمان اطمینان حاصل کنیم کد ما ممکن است نسبت به وضعیت سیستم و وضعیت اپلیکیشن رفتارهای متفاوتی از خود نشان دهد و مثلاً توابع مختلفی را در هر وضعیت صدا کند. مهم آن است که از درست رفتار کردن کد مان در تمام حالت ها اطمینان حاصل کنیم تا مطمئن شویم که کدمان درست اجرا می شود. منبع
خب اگر که تا الان یه پیش زمینه ای راجع به تست نویسی فهمیدین که خداروشکر. اگر نه پیشنهاد میکنم برید و مطلب لینک شده بالا رو بخونید.
شروع تست نویسی در PHP
برای شروع نرم افزار VScode رو باز میکنم.
من به چی نیاز دارم؟
یه پروژه جدید درست میکنیم به اسم PHPUnit
الان من باید کامپوزر رو توی این برنامم به کار ببرم پس باید یه فایل composer.json رو بسازم و توش اینو قرار بدم
1{
1"autoload": {
1"psr-4": {
1}
1}
1}
خب این الان فرمت استاندارد فایل کامپوزر هست. خیلی لازم نیست بدونین حالا این چیکار میکنه یا دقیقا چیه ولی اگه خیلی مشتاقین میتونین به اموزش قبلی من در این لینک ببینین که این چیکار میکنه.
خیلی خب حالا لازمه که توی ترمینال یا CMD بیاین و وارد همین پوشه بشین و این دستور نصب کامپوزر رو بزنین (اگه که کامپوزر رو نصب ندارین اول لازم هست که اون رو از سایتش دانلود کنین)
1composer install
خب حالا پیامی میاد و شروع میکنه اضافه کردن پوشه های مورد نیاز. الان کامپوزر نصب شد خیلیم عالی! حالا باید چیکار کنم؟ :l
نصب PHPUnit در کامپوزر
شما با استفاده از کامپوزر میتونین پکیج های مورد نیازتونو نصب کنین و ما الان نیازمند پکیج PHPUnit هستیم. خب میایم و این دستور رو وارد میکنیم
1 composer require phpunit/phpunit --dev
خیلی خب حالا شروع میکنه نصب PHPUnit و نیازمندی هاش. خیلیم عالی. ولی اقای فلانی شما تا اینجا فقط نصبش کردین. اموزشش چی؟
بریم سراغ اموزش کار با این پکیج PHPUnit
صبر کنین ما هنوز یسری کارای نصبشو نکردیم!! بیاید اول کارای باقی مونده رو انجام بدیم. انقد عجله نکنیم.
ما باید یه فایل phpunit.xml بسازیم. ساخت این فایل لازمه و این فایل هست که به پکیج ما اطلاعات میده. پس حتما یادتون باشه ساختش
این مقادیر رو داخلش قرار بدین تا یه توضیحی بدیم در بارش
1<?xml version="1.0" encoding="UTF-8"?>
1<phpunit bootstrap="vendor/autoload.php"
1colors="true" verbose="true" stopOnFailure="true">
1<testsuites>
1<testsuite name="unit">
1<directory>tests</directory>
1</testsuite>
1</testsuites>
1</phpunit>
خب اینا چی میگن؟ این فرمت استاندارد Xml هست و اطلاعات رو به پکیج ما میده. اول از همه میگیم ادرس فایل های نگه دارنده کجاس؟ توی تگ <phpunit> میایم میگیم ادرسش توی vendor و فایل autoload هست. همه فایل های ما از اینجا لود میشن.
تگ testsuites هم ریشه همه تست های ماست. تگ testsuite هم مختص فقط به یک نوع تست هست که ما این رو با اتریبیوت name مشخص میکنیم. که خب ما گفتیم باید unit باشه.
خیلی خب داخل تگ testsuite باید تگ directory بزاریم و ادرس پوشه ای که داخلش تست ها قرار میگیره.
خیلی خب حالا ما باید پوشه فایل های تست رو مشخص کنیم. حالا باید یه پوشه Tests بسازیم و داخلش هم یه پوشه unit بسازیم.
داخل پوشه unit باید فایل های تست مون قرار بگیره.
ایندفعه جدی جدی میریم برای نوشتن تست 🙂
خب حالا باید یک فایل ایجاد کنیم داخل پوشه های تست مون. اسمش رو چی بزاریم؟ من میزارم TestExample.php
باید فایل های تست حتما دارای Test اول اسمشون باشن. وگرنه به عنوان فایل تست قبول نمیشن
داخل فایل تست که ساختیم میام این رو مینویسم:
1<?php
1use PHPUnit\Framework\TestCase;
1class TestExample extends TestCase
1{
1}
خب این کد که نیاز به توضیح خاصی نداره.
حالا میایم و یه فانکشن تست داخلش مینویسیم:
1<?php
1use PHPUnit\Framework\TestCase;
1class TestExample extends TestCase
1{
1public function test_example_assert_true(){
1$this->assertTrue(true);
1}
1}
خب این تابعی که نوشتیم یعنی چی؟ ما یه تابع نوشتیم و داخلش گفتیم از شی جاری متود assertTrue رو صدا بزن و بهش true رو پاس دادیم. میاد چیکار میکنه؟ این تابع میاد برابر با مقدار true قرار میده. یعنی ما میایم مقدار true رو برابر true قرار میدیم و این جوابش چی میشه؟ میشه true
یعنی تست درست هست. میایم و تست رو فراخوانی میکنیم تا اجرا بشه
توی همون پوشه توی cmd باید بنویسیم
12vendor\bin\phpunit
تا بره و تست هارو اجرا کنه!
و تمام!
1PS F:\wampp\www\SpotifyLogin\PHPUnit> vendor\bin\phpunit
1PHPUnit 8.5.0 by Sebastian Bergmann and contributors.
1Runtime: PHP 7.2.18
1Configuration: F:\wampp\www\SpotifyLogin\PHPUnit\phpunit.xml
1. 1 / 1 (100%)
1Time: 103 ms, Memory: 4.00 MB
OK (1 test, 1 assertion)
تست با موفقیت انجام شد! این قسمت اول از اموزش تست نویسی بود امیدوارم مورد توجهتون بوده باشه.