下面由laravel教程欄目給大家介紹掌握 laravel 的測試方法,希望對需要的朋友有所幫助!
掌握 Laravel 的測試方法
不管你承認與否在研發一款產品時,軟件測試對項目而言意義重大,然而是測試通常被我們視而不見。這篇文章我們主要研究 Laravel 框架的測試方法。
或許你還不知道,Laravel 內核早已繼承了 phpUnit 單元測試組件。PHPUnit 是 PHP 社區里使用最廣泛、最受歡迎的測試框架之一。PHPUnit 同時支持「單元測試」和「功能測試」兩種特性。
我們會簡單介紹 PHPUnit 「單元測試」和「功能測試」的基本使用方法。繼而,講解如何在 Laravel 項目中創建「單元測試」和「功能測試」用例。不過本篇我們假定你已經對 PHPUnit 測試框架有了基本的了解,所以讓我們把焦點放到 Laravel 中使用 PHPUnit 進行測試這個主題中。
單元測試和功能測試
如果您已經接觸過 PHPUnit 框架,那么您應該知道,它支持兩種類型特性 — 「單元測試」和「功能測試」。
「單元測試」的目的是用于測試函數或方法的正確性。更重要的是,我們可以輕松實現代碼邏輯的正確性。
如果您在開發過程中發現某個功能包含多個邏輯處理,那么最好將每個處理邏輯拆分到不同的方法里,這樣以確保單個方法和代碼塊可測試。
我們以一個理想的方法來窺探單元測試的奧秘。
<?php public function getNameAttribute($value) { return ucfirst($value); }
如你所見,這個方法僅處理一個業務邏輯,方法內部通過 ucfirst 函數將字符轉換成首字母大寫格式。
單元測試是為了保證每個獨立單元的代碼正確性;功能測試則是為了保證一個功能的正確性。一言以蔽之,就是通過特定的測試用例模擬用戶訪問應用的行為驗證系統的正確性。
例如,我們可以為包含如下步驟的登錄功能實現一個功能測試用例:
-
發起一個訪問登錄頁面的 GET 請求;
-
判斷我們是否處在登錄頁面;
-
生成用于采用 POST 請求方式登錄的登錄數據;
-
判斷是否創建登錄會話數據成功。
這就是應該如何創建「功能測試」用例的秘密。接下來我們將創建具體的測試用例,來講解如何在 Laravel 中使用「單元測試」和「功能測試」。
搭建測試環境
創建測試模型
在開始創建測試用例前,我們需要先構建起用于測試的項目依賴。
先執行下面的 artisan 命令創建一個 Post 模型及其對應的遷移文件。
$?php?artisan?make:model?Post?--migration
上面的命令將為我們創建一個 Post 模型類和數據庫遷移文件。
Post 模型代碼如下:
<?php // app/Post.php namespace App; use IlluminatedatabaseEloquentModel; class Post extends Model { // }
數據庫遷移文件 YYYY_MM_DD_HHMMSS_create_posts_table.php 將創建在 database/migrations 目錄中。
Post 數據表會存儲一篇文章的標題。修改后 Post 數據庫遷移文件代碼如下:
<?php use IlluminateSupportFacadesSchema; use IlluminateDatabaseSchemaBlueprint; use IlluminateDatabaseMigrationsMigration; class CreatePostsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('posts', function (Blueprint $table) { $table->increments('id'); ????????????$table->String('name'); ????????????$table->timestamps(); ????????}); ????} ????/** ?????*?Reverse?the?migrations. ?????* ?????*?@return?void ?????*/ ????public?function?down() ????{ ????????Schema::dropIfExists('posts'); ????} }
如你所見,我們通過新增的 $table->string(‘name’) 來存儲文章的標題。接下來,執行數據庫遷移命令就回在數據庫中創建對應的數據表了。
$?php?artisan?migrate
在創建完數據表之后,我們需要向 Post 模型類中加入如下代碼
<?php namespace App; use IlluminateDatabaseEloquentModel; class Post extends Model { /** * Get the post title. * * @param string $value * @return string */ public function getNameAttribute($value) { return ucfirst($value); } }
我們剛剛添加了 accessor 方法,它的功能是修改文章的標題,這正是我們在單元測試用例中要測試的。