ابزار PHP Unit

اصول Test Driven Development

تاریخ : جمعه 26 آبان 1396

با استغاده از برنامه PHPUnit امکانات لازم جهت انجام مراحل تست واحد برای برنامه های PHP فراهم می گردد.

نصب PHPUnit

جهت نصب PHP unit می توان از برنامه composer استفاده نمائیم . بنابراین دستور زیر را در ترمینال وارد نمائید تا مراحل نصب تکمیل گردد :

$ composer global require phpunit/phpunit

برنامه بصورت global نصب گرددید به این معنا که در تمامی پروژه ها و دایرکتوری ها می توان از این برنامه استفاده کرد. جهت اطمینان از صحت نصب، دستور زیر را در ترمینال وارد تا ورژن نصب شده نمایش داده شود :

$ phpunit --v

بسیار خب... می خواهیم از این قسمت به بعد مراحل تنظیمات و نوشتن تست را بصورت یک پروژه بیان کنیم. بنابراین دایرکتوری به نام myproject ایجاد و درون آن دایرکتوری دیگری به نام test ایجادمی کنیم.

همچنین چون ما از روش PSR-4 جهت لودینگ کلاس ها استفاده می کنیم بنابراین فایلی به نام composer.json را در مسیر اصلی پروژه ایجاد و کد زیر را درون آن قرار دهید :

{

}

سپس درون ترمینال دستور زیر را وارد تا پوشه vendor ایجاد گردد :

composer dump


تنظیمات PHP Unit در پروژه

جهت تنظیمات مورد نظرمان از فایل phpunit.xml در شاخه اصلی پروژه استفاده می نمائیم. همانند کد زیر :

<?xml version="1.0" encoding="UTF-8"?

در کد بالا دو تنظیم انجام داده ایم که عبارتند از :

  • با استفاده از ویژگی colors="true" تعیین کردیم که نتایج آزمایش بصورت رنگی در ترمینال نمایش داده شود
  • با استفاده از تگ directory تعیین کردیم که مسیر فایل های تست ما درون پوشه test در شاخه اصلی قرار دارند.

ساختار و نام فایل تست در PHP Unit

  • تمامی فایل های تست حتما باید با کلمه Test به پایان برسد. همچنین جهت آشکار سازی فایل تست که متعلق به کدام قسمت از برنامه است بهتر است فایل ها و مسیرهای همنام در دایرکتوری تست ایجاد گردند. برای مثال چنانچه در پروژه داشته باشیم :

    foo.php
    bar.php
    Controller/baz.php

    نام و مسیر فایل های تست ما بدینگونه خواهد بود :

    fooTest.php
    barTest.php
    Controller/bazTest.php

  • نام کلاس درون فایل تست بهتر است همنام با نام فایل باشد.
  • نام آزمون حتما باید با کلمه test بصورت حروف کوچک آغاز گردد.
  • اسامی آزمون ها باید توصیفی از عملی باشد که مورد آزمایش قرار می گیرد و بهتر است بصورت اختصار و کوتاه نباشد تا بیانگر آزمایشی باشد که انجام می دهد.

    برای مثال چنانچه تابعی به نام ()verifyAccount داشته باشیم که عمل مطابقت رمز عبور را برای یک حساب کاربری انجام می دهد آنگاه می توانیم نام آزمون را اینطور انتخاب کنیم :

    ()testVerifyAccountMatchesPasswordGiven

  • سطح دسترسی متدهای آزمون باید از نوع public باشند.
  • کلاس آزمون باید گسترش یافته از PHPUnit_Framework_TestCase و یا هرکلاس دیگری که این وظیفه را برعهده دارد باشد.

در کد زیر نمونه ای از یک آزمون را مشاهده می کنید :

<?php
namespace Test;

class StringUtils extends \PHPUnit_Framework_TestCase
{
    public function testVerifyAccountMatchesPasswordGiven()
    {

    }
}

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


منابع مورد مطالعه جهت جمع آوری این مطلب:
https://jtreminio.com/2013/03/unit-testing-tutorial-introduction-to-phpunit/


نظرات