php – phpUnit 快速教學

透過 composer 安裝
1 2 3 |
composer require phpunit/phpunit |
透過 Composer 的 Autoload 指定 psr-4 的自動讀取規範。如修改 composer.json,我指定命名空間 MyLib 對應的根目錄是 src。
1 2 3 4 5 6 7 |
"autoload": { "psr-4": { "MyLib\\": "src" } } |
開始建立我們的第一支類別 src/SayHi.php
1 2 3 4 5 6 7 8 9 10 11 |
<?php namespace MyLib; class SayHi { public function main() { return "Hi"; } } |
我們建立一支單元測試檔 test/CaryTest.php。用來測試 SayHi::main() 回傳的時候,是否等於我們預期的值 “Hi”。我們透過 phpUnit 提供的斷言方法 assertEquals()。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php use MyLib\SayHi; use PHPUnit\Framework\TestCase; class CaryTest extends TestCase { public function testSayHi() { $sayHi = new SayHi(); $this->assertEquals($sayHi->main(), "Hi"); } } |
有更多的斷言方法,可以參考官網。接著 Command-Line 運行測試
1 2 3 4 5 6 7 |
Windows: vendor\bin\phpunit tests\CaryTest.php Linux: vendor/bin/phpunit tests/CaryTest.php |
如果有多筆 test 的話,可以運行到資料夾,會一次跑所有的測試
1 2 3 |
vendor/bin/phpunit tests/CaryTest.php |
接著我們能看到執行的結果

大致上懂到這裡就好。
我們可以看到輸出有個「.」的符號,那是有意思的。官方說
- . 代表測試成功
- F 測試運行的時候發生斷言失敗
- E 測試運行的時候發生錯誤
- R 測試運行的時候被標記有風險
- S 印出的時候測試被跳過
- I 印出的時候, 測試被標記未完成或尚未實現
執行測試的時候,也可以使用這種格式化
1 2 3 |
vendor\bin\phpunit --testdox tests |