📜 تستهای واحد(Unit Tests) لاراول
تستهای واحد (Unit Tests) بهطور خاص برای آزمایش عملکرد و صحت بخشهای کوچک و مستقل از برنامه مانند متدها و توابع نوشته میشوند. این تستها معمولاً برای اطمینان از این که هر بخش از کد بهدرستی عمل میکند، استفاده میشوند.
لاراول بهطور پیشفرض ابزار PHPUnit را برای نوشتن و اجرای تستهای واحد فراهم کرده است. در این مقاله، نحوه نوشتن و اجرای تستهای واحد در لاراول را بررسی خواهیم کرد.
1. 🛠 نصب و تنظیم PHPUnit در لاراول
لاراول بهطور پیشفرض PHPUnit را بهعنوان ابزاری برای تستها پیکربندی کرده است. بهطور معمول، پس از نصب لاراول، PHPUnit بهطور خودکار در پروژه شما نصب میشود. شما میتوانید از فایل phpunit.xml در ریشه پروژه برای پیکربندی تستهای خود استفاده کنید.
برای نصب یا بهروزرسانی PHPUnit، میتوانید دستور زیر را اجرا کنید:
بعد از نصب، شما میتوانید با استفاده از دستور زیر تستها را اجرا کنید:
2. 🧑💻 نوشتن تستهای واحد در لاراول
برای نوشتن تستهای واحد، ابتدا باید یک کلاس تست ایجاد کنید. لاراول این امکان را به شما میدهد که از دستور artisan برای ایجاد کلاسهای تست استفاده کنید.
2.1. ایجاد کلاس تست
برای ایجاد یک تست واحد برای یک کلاس خاص (مثلاً برای مدل User)، میتوانید از دستور artisan make:test استفاده کنید:
این دستور یک کلاس جدید تست در مسیر tests/Feature یا tests/Unit (بسته به نوع تست) ایجاد میکند.
2.2. ساخت یک تست ساده
در ادامه، یک تست ساده برای چک کردن اعتبار یک متد فرضی در مدل User خواهیم نوشت. فرض کنید شما یک متد به نام isActive() در مدل User دارید که بررسی میکند آیا کاربر فعال است یا خیر.
مثال:
حالا برای تست این متد، در کلاس UserTest مینویسیم:
در این تست، ما دو کاربر با وضعیتهای مختلف ایجاد کردهایم و سپس از متد assertTrue() و assertFalse() برای تأیید درستی عملکرد متد isActive() استفاده کردهایم.
3. 🚀 اجرای تستهای واحد
پس از نوشتن تستها، میتوانید آنها را با استفاده از دستور زیر اجرا کنید:
این دستور تمام تستهای موجود در پوشه tests را اجرا کرده و نتایج را در کنسول نمایش میدهد.
3.1. اجرای تستهای خاص
اگر بخواهید فقط یک تست خاص را اجرا کنید، میتوانید نام تست یا کلاس تست مورد نظر را به دستور اضافه کنید:
این دستور فقط تستهای موجود در کلاس UserTest را اجرا میکند.
4. 🧑🔧 تستهای وابسته به دیتابیس
اگر در تستهای خود از دیتابیس استفاده میکنید (مثل ایجاد یا بهروزرسانی رکوردها)، لاراول این امکان را فراهم میکند که با استفاده از پایگاهدادههای آزمایشی (in-memory database) یا تراکنشها (transactions) این تستها را ایزوله و سریعتر اجرا کنید.
4.1. استفاده از پایگاهداده در تستها
لاراول بهطور پیشفرض از یک پایگاهداده موقت برای تستها استفاده میکند. شما میتوانید این پایگاهداده را در فایل .env.testing تنظیم کنید.
برای مثال، در فایل phpunit.xml، میتوانید این تنظیمات را اعمال کنید:
این کار باعث میشود که لاراول از پایگاهداده SQLite بهصورت موقت استفاده کند.
4.2. استفاده از تراکنشها برای ایزوله کردن تستها
برای جلوگیری از تأثیر تغییرات انجامشده در دیتابیس روی تستهای دیگر، میتوانید از تراکنشها استفاده کنید. لاراول بهطور پیشفرض از تراکنشها برای تستها استفاده میکند.
5. 🧩 مفاهیم پیشرفته در تستهای واحد لاراول
5.1. Mocking و Stubbing
گاهی اوقات در تستها، نیاز به شبیهسازی متدها و اشیاء دارید. لاراول ابزارهایی برای Mock کردن و Stub کردن متدها فراهم کرده است تا بتوانید رفتار آنها را کنترل کنید.
مثال:
5.2. Test Coverage
تست پوشش (Test Coverage) برای بررسی درصد کدهایی که تحت تست قرار گرفتهاند، استفاده میشود. برای اجرای تست پوشش در لاراول، میتوانید از ابزارهایی مثل Xdebug یا PHP_CodeCoverage استفاده کنید.
5.3. تستهای پارامتریک
در برخی موارد ممکن است نیاز داشته باشید که تستهای خود را برای ورودیهای مختلف اجرا کنید. برای این کار میتوانید از تستهای پارامتریک استفاده کنید.
نتیجهگیری
تستهای واحد بخش مهمی از فرآیند توسعه نرمافزار هستند و در لاراول بهطور ساده و کاربردی قابل پیادهسازی هستند. با استفاده از PHPUnit و ابزارهایی مانند Mocking و Stubbing، میتوانید کد خود را بهطور دقیق و ایزوله تست کنید. این کار به شما کمک میکند که مطمئن شوید که بخشهای مختلف اپلیکیشن شما بهدرستی کار میکنند و بهراحتی میتوانید مشکلات و خطاها را شناسایی و برطرف کنید.