ساختار دایرکتوری تست‌ها در لاراول

laravel tests directory structure
20 آبان 1403

در دنیای توسعه نرم‌افزار، تست‌نویسی یکی از عناصر اساسی برای تضمین کیفیت و صحت عملکرد نرم‌افزار است. فریم‌ورک لاراول به دلیل قابلیت‌ها و امکانات گسترده‌ای که ارائه می‌کند، تست‌نویسی را بسیار ساده کرده است. این موضوع به خصوص در مورد تست‌های unit و feature صدق می‌کند.

دایرکتوری tests در پروژه‌های لاراول به صورت پیش‌فرض دارای دو زیرشاخه اصلی به نام‌های Feature و Unit است. هر کدام از این قسمت‌ها برای نوع خاصی از تست‌نویسی طراحی شده‌اند. در حالی که تست‌های unit برای بررسی کردن عملکرد کوچکترین واحدهای کد (معمولاً توابع یا متدها) به کار می‌روند، تست‌های feature برای ارزیابی رفتار کل سیستم مورد استفاده قرار می‌گیرند.

در فایل‌های Unit معمولاً از استفاده‌های عمده آن می‌توان به تست‌نویسی برای مدل‌ها یا توابع کاربردی اشاره کرد. به این صورت که هر تابع یا متدی که شما در پروژه خود اضافه می‌کنید باید یک تست مرتبط به خود داشته باشد. این موضوع باعث می‌شود تا خطاهای احتمالی در زمان توسعه زودتر شناسایی شوند.

اما در Feature علاوه بر تست واحد، تست‌هایی نیز برای سناریوهای کامل و جریان کاری بزرگتر نوشته می‌شود. به عنوان مثال، شما می‌توانید تست کنید که آیا یک کاربران می‌تواند به درستی ثبت‌نام کند یا خیر.

به علاوه، لاراول از پکیج PHPUnit استفاده می‌کند که امکان نوشتن، اجرا کردن و مدیریت کردن تست‌ها را در پروژه شما فراهم می‌کند. استفاده از test case‌های فراهم شده در لاراول کار شما را برای نگهداری و اجرای تست‌ها بسیار ساده می‌کند.

در زیر چند نمونه کد مرتبط با دایرکتوری tests آورده شده است:

<?php

namespace Tests\Unit;

use PHPUnit\Framework\TestCase;

class ExampleTest extends TestCase
{
    public function testBasicTest()
    {
        $this->assertTrue(true);
    }
}

در مثال بالا، یک تست simple در دایرکتوری unit نوشته شده که تنها تعیین می‌کند که true باشد:


<?php ← در فایل تستی که ایجاد کرده‌اید، از این تگ برای شروع استفاده می‌شود.

namespace Tests\Unit; ← فضای نام که به سیستم می‌گوید این کلاس تست در کجا قرار دارد و به دسته‌بندی کمک می‌کند.

use PHPUnit\Framework\TestCase; ← کلاس پایه لاراول برای تست‌ها که از کلاس TestCase در PHPUnit استفاده می‌کند.

class ExampleTest extends TestCase ← ایجاد یک کلاس جدید برای تست که از TestCase لاراول ارث‌بری کرده است.

public function testBasicTest() ← یک تابع تست ساده که بررسی می‌کند مقدار true درست است یا نه.

$this->assertTrue(true); ← در این قسمت با استفاده از PHPUnit می‌گوییم مقدار true باید صحیح باشد.

سوالات متداول

؟

تفاوت بین تست unit و feature در لاراول چیست؟

؟

چگونه می‌توانم تست‌های خود را در لاراول اجرا کنم؟

؟

آیا می‌توانم از سایر فریم‌ورک‌های تست برای لاراول استفاده کنم؟