測試是軟體開發的關鍵部分,但它通常感覺像是一件苦差事。幸運的是,Laravel 透過其內建工具使測試變得輕而易舉,幫助開發人員確保他們的應用程式按預期工作,而無需花費無休止的調試時間。無論您是建立小型專案還是大型應用程序,單元測試都可以透過及早發現問題來幫助您避免潛在的麻煩。
在這篇部落格中,我們將探索 Laravel 中的單元測試——它是什麼、為什麼它很重要以及如何開始編寫測試。最後,您將了解如何透過實際範例在 Laravel 中建立和執行測試。
單元測試 是一種測試類型,您可以編寫程式碼來測試應用程式的各個單元,例如函數、方法或類別。這些測試規模小、速度快,並且專注於確保特定程式碼段能如預期運作。
在 Laravel 中,單元測試通常使用 PHPUnit 編寫,它預先安裝在 Laravel 中。
單元測試一開始可能感覺像是額外的工作,但好處遠遠超過最初的努力。這就是為什麼值得您花時間的原因:
Laravel 已預先配置用於單元測試,因此您無需安裝任何其他工具。以下是如何開始:
Laravel 包含開箱即用的 PHPUnit。您可以透過執行來檢查版本:
vendor/bin/phpunit --version
Laravel 提供了一個方便的 Artisan 指令來產生新的測試類別:
php artisan make:test ExampleTest --unit
這會在tests/Unit目錄中建立一個測試檔案:
vendor/bin/phpunit --version
Laravel 使用 .env.testing 檔案進行測試。複製 .env 檔案並將其重新命名為 .env.testing。更新資料庫配置以使用單獨的測試資料庫,確保您的測試不會影響您的開發資料庫。
php artisan make:test ExampleTest --unit
讓我們寫一個簡單的測試來檢查類別中的方法是否回傳預期值。
在 app/Helpers/MathHelper.php 建立一個輔助類別:
tests/ ├── Unit/ │ └── ExampleTest.php
在tests/Unit/MathHelperTest.php中為此函數編寫測試:
DB_CONNECTION=sqlite DB_DATABASE=:memory:
運行測試:
namespace App\Helpers; class MathHelper { public static function add($a, $b) { return $a + $b; } }
如果一切正確,PHPUnit 將輸出:
namespace Tests\Unit; use PHPUnit\Framework\TestCase; use App\Helpers\MathHelper; class MathHelperTest extends TestCase { public function testAddition() { $result = MathHelper::add(2, 3); $this->assertEquals(5, $result); } }
模型是任何 Laravel 應用程式的核心。讓我們測試一個簡單的模型方法。
在 app/Models/User.php 中使用自訂方法新增使用者模型:
vendor/bin/phpunit
在tests/Unit/UserTest.php中編寫測驗:
OK (1 test, 1 assertion)
對於控制器,您通常會使用功能測試,但您仍然可以測試單一方法。
在app/Services/ExampleService.php中建立服務:
namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class User extends Model { use HasFactory; public function isAdmin() { return $this->role === 'admin'; } }
為其寫一個測驗:
namespace Tests\Unit; use PHPUnit\Framework\TestCase; use App\Models\User; class UserTest extends TestCase { public function testIsAdmin() { $user = new User(); $user->role = 'admin'; $this->assertTrue($user->isAdmin()); } }
要執行專案中的所有測試:
namespace App\Services; class ExampleService { public function greet($name) { return "Hello, $name!"; } }
執行特定的測試檔案:
namespace Tests\Unit; use PHPUnit\Framework\TestCase; use App\Services\ExampleService; class ExampleServiceTest extends TestCase { public function testGreeting() { $service = new ExampleService(); $this->assertEquals('Hello, John!', $service->greet('John')); } }
輸出將顯示:
Laravel 中的單元測試不必令人生畏。憑藉其內建工具以及與 PHPUnit 的無縫集成,Laravel 使編寫和管理測試變得容易。透過採用測試第一的思維方式,您將確保您的應用程式健壯、可靠並準備好投入生產。
從小處開始-為單一函數或類別編寫測試。當您適應後,您將看到單元測試如何改變您的開發過程。快樂編碼!
以上是Laravel 中的單元測試:開發人員的實用方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!