تکنولوژی نوین اینترنتی
تستهای واحد (Unit Tests) بهطور خاص برای آزمایش عملکرد و صحت بخشهای کوچک و مستقل از برنامه مانند متدها و توابع نوشته میشوند. این تستها معمولاً برای اطمینان از این که هر بخش از کد بهدرستی عمل میکند، استفاده میشوند.
لاراول بهطور پیشفرض ابزار PHPUnit را برای نوشتن و اجرای تستهای واحد فراهم کرده است. در این مقاله، نحوه نوشتن و اجرای تستهای واحد در لاراول را بررسی خواهیم کرد.
لاراول بهطور پیشفرض PHPUnit را بهعنوان ابزاری برای تستها پیکربندی کرده است. بهطور معمول، پس از نصب لاراول، PHPUnit بهطور خودکار در پروژه شما نصب میشود. شما میتوانید از فایل phpunit.xml
در ریشه پروژه برای پیکربندی تستهای خود استفاده کنید.
برای نصب یا بهروزرسانی PHPUnit، میتوانید دستور زیر را اجرا کنید:
بعد از نصب، شما میتوانید با استفاده از دستور زیر تستها را اجرا کنید:
برای نوشتن تستهای واحد، ابتدا باید یک کلاس تست ایجاد کنید. لاراول این امکان را به شما میدهد که از دستور artisan
برای ایجاد کلاسهای تست استفاده کنید.
برای ایجاد یک تست واحد برای یک کلاس خاص (مثلاً برای مدل User
)، میتوانید از دستور artisan make:test
استفاده کنید:
این دستور یک کلاس جدید تست در مسیر tests/Feature
یا tests/Unit
(بسته به نوع تست) ایجاد میکند.
در ادامه، یک تست ساده برای چک کردن اعتبار یک متد فرضی در مدل User
خواهیم نوشت. فرض کنید شما یک متد به نام isActive()
در مدل User
دارید که بررسی میکند آیا کاربر فعال است یا خیر.
حالا برای تست این متد، در کلاس UserTest
مینویسیم:
در این تست، ما دو کاربر با وضعیتهای مختلف ایجاد کردهایم و سپس از متد assertTrue()
و assertFalse()
برای تأیید درستی عملکرد متد isActive()
استفاده کردهایم.
پس از نوشتن تستها، میتوانید آنها را با استفاده از دستور زیر اجرا کنید:
این دستور تمام تستهای موجود در پوشه tests
را اجرا کرده و نتایج را در کنسول نمایش میدهد.
اگر بخواهید فقط یک تست خاص را اجرا کنید، میتوانید نام تست یا کلاس تست مورد نظر را به دستور اضافه کنید:
این دستور فقط تستهای موجود در کلاس UserTest
را اجرا میکند.
اگر در تستهای خود از دیتابیس استفاده میکنید (مثل ایجاد یا بهروزرسانی رکوردها)، لاراول این امکان را فراهم میکند که با استفاده از پایگاهدادههای آزمایشی (in-memory database) یا تراکنشها (transactions) این تستها را ایزوله و سریعتر اجرا کنید.
لاراول بهطور پیشفرض از یک پایگاهداده موقت برای تستها استفاده میکند. شما میتوانید این پایگاهداده را در فایل .env.testing
تنظیم کنید.
برای مثال، در فایل phpunit.xml
، میتوانید این تنظیمات را اعمال کنید:
این کار باعث میشود که لاراول از پایگاهداده SQLite بهصورت موقت استفاده کند.
برای جلوگیری از تأثیر تغییرات انجامشده در دیتابیس روی تستهای دیگر، میتوانید از تراکنشها استفاده کنید. لاراول بهطور پیشفرض از تراکنشها برای تستها استفاده میکند.
گاهی اوقات در تستها، نیاز به شبیهسازی متدها و اشیاء دارید. لاراول ابزارهایی برای Mock کردن و Stub کردن متدها فراهم کرده است تا بتوانید رفتار آنها را کنترل کنید.
تست پوشش (Test Coverage) برای بررسی درصد کدهایی که تحت تست قرار گرفتهاند، استفاده میشود. برای اجرای تست پوشش در لاراول، میتوانید از ابزارهایی مثل Xdebug یا PHP_CodeCoverage استفاده کنید.
در برخی موارد ممکن است نیاز داشته باشید که تستهای خود را برای ورودیهای مختلف اجرا کنید. برای این کار میتوانید از تستهای پارامتریک استفاده کنید.
تستهای واحد بخش مهمی از فرآیند توسعه نرمافزار هستند و در لاراول بهطور ساده و کاربردی قابل پیادهسازی هستند. با استفاده از PHPUnit و ابزارهایی مانند Mocking و Stubbing، میتوانید کد خود را بهطور دقیق و ایزوله تست کنید. این کار به شما کمک میکند که مطمئن شوید که بخشهای مختلف اپلیکیشن شما بهدرستی کار میکنند و بهراحتی میتوانید مشکلات و خطاها را شناسایی و برطرف کنید.