刻意練習,堅持
作為一名開發人員,保證程式碼質量是基本的素養。良好的程式碼規範是不錯的方法,也是一直在堅持的。對程式碼的自動化測試,則是另一種重要的形式。這裡不糾結於單元測試、介面測試、功能測試這些概念,核心是實現 自動化測試 的目標。
在這段稱得上“入門”的階段之前,也斷斷續續嘗試了幾次自動化測試的學習,但都是不了了之。究其原因,主要有兩點:一是沒有動手去刻意練習,只是粗略的看了文件;二是糾結要如何開始對自己程式碼的測試。
現在的 Web
開發,大都是在比較成熟的框架基礎上進行。個人主要在 Laravel
框架上開發,就以該框架為例記錄自己“入門”的經歷。( Laravel
版本為 5.8
,其它版本可能有所區別,具體檢視官方文件)
認識 PHPUnit
自動化測試 就是要通過編寫測試程式碼來對應用程式程式碼進行測試,為了編寫更加規範、更加簡介的測試程式碼,就產生了測試框架。
PHPUnit
是面向 PHP
開發者的成熟測試框架,進行自動化測試大概率都要使用該工具,對其有一定的認識是必要的。官網地址:www.phpunit.cn/
看著官方文件上那麼多章節的內容,總是容易被勸退。但剛開始並不需要掌握那麼多的,核心三點:安裝、編寫、執行。
安裝 PHPUnit
有兩種方式可以使用 PHPUnit
:
- 一是獨立下載
PHPUnit.phar
檔案,然後編寫批處理檔案**
echo @php “%~dp0phpunit.phar” %* > phpunit.cmd**
,再加入環境變數,即可全域性使用phpunit
命令。 - 二是在應用程式中通過
composer
安裝phpunit/phpunit
包,然後在應用程式根目錄下就可以使用./vendor/bin/phpunit
命令。
具體使用哪種方式,也是跟著使用場景走,兩者都用也可行。
- 如果只是個人簡單嘗試,並沒有一個應用程式,當然選擇第一種方式就可以了。
- 如果是開發過程中的接入測試,第二種方式顯然更優,並且很多框架都繼承了測試框架,使用會更加優雅。
編寫測試
工具準備好了,接下來就是去編寫測試程式碼,這需要遵循測試框架基本慣例和步驟:
- 以類為單位,開始編寫測試程式碼。測試類遵循
Test
結尾的駝峰命名 - 測試類繼承測試框架提供的抽象類
PHPUnit\Framework\TestCase
(在框架中可能是其它類) - 類方法就是一個個測試用例,這裡編寫具體的測試邏輯
- 類方法支援以
test
開頭的駝峰命名 或者 新增@test
註解的蛇形命名兩種形式
一個簡單的測試示例:
<?php
use PHPUnit\Framework\TestCase;
// 測試類命名以 Test 結尾,繼承 TestCase
class ExapmleTest extends TestCase
{
// 測試用例1,以 test 開頭的駝峰命名
public function testTrue()
{
$this->assertTrue(true);
}
/** @test 測試用例2,使用 @test 註解的蛇形命名*/
public function is_false()
{
$this->assertFalse(false);
}
}
執行測試
當我們編寫好一個測試類後,就可以使用 phpunit
執行相應測試了,只需要簡單的在測試檔案所在目錄下,在命令列中執行 phpunit ExampleTest.php
即可,輸出通常如下:
PHPUnit 6.5.3 by Sebastian Bergmann and contributors.
.. 2 / 2 (100%)
Time: 483 ms, Memory: 10.00MB OK (2 test, 2 assertion)
注意上面第三行的 .
字元,對於每個測試的執行, PHPUnit
都會輸出一個字元來表示其執行結果,常見的三種字元如下:.
表示測試通過, F
表示測試中斷言失敗, E
表示測試中出現了錯誤,其它字元參考文件。
上面是執行一整個檔案的全部測試,有時候只需要執行單個測試,也是可以的:
phpunit --filter testTrue ./ExapmleTest.php
更多的命令列選項,在使用過程中,根據需求查詢文件獲知。
參考
本作品採用《CC 協議》,轉載必須註明作者和本文連結