我們可以利用 測試框架 來幫助我們編寫測試,減少重複的程式碼,以及豐富的 Assertion 函式可以在不同狀況下使用。
雖然常用程式語言的原生語法中,大概都有用來做單元測試的Assertion
語法,但大概很簡陋,需要有豐富或細緻的功能的話,就需要自己動手下去刻。
每個語言可能都有複數的測試框架可以使用,PHP 最廣泛使用之一是PHPUnit
,Python 的pytest
功能強大、原生內建也有 unittest
,還沒鑽研過 Java 但也聽過有名的 JUnit
。
接著讓我們來介紹 PHPUnit 的使用吧。
從安裝開始說起,我們利用套件管理系統 Composer 來安裝 PHPUnit,這邊只說明在我在 MacOS 上的方式。
現在已經可以直接透過 Homebrew
來安裝 Composer。
$ brew install composer
在 Terminal 進到專案的資料夾後,
$ composer require --dev phpunit/phpunit
會在目前位置建立兩個檔案及一個資料夾,composer.json
紀錄著想要安裝的套件及其他更多 Composer 設定,composer.lock
紀錄所有安裝及相依套件目前的版本,一個資料夾vendor/
存放著安裝的套件以及許多神秘的小精靈。
require
代表要這個套件,--dev
表示這個套件只在開發階段需要用到,phpunit/phpunit
前者代表上架者/公司的名字,後者才是套件名稱。
此時已安裝完 PHPUnit,不過要注意是只在目前的專案資料夾內,跟用 Homebrew 安裝 Composer 不一樣,並不是全域地安裝在整台電腦。
我們會將測試都放在tests/
裡,主程式放在src/
,在資料夾的結構上把他們獨立出來比較不容易混淆。
所以現在專案資料夾看起來長這樣:
├── composer.json
├── composer.lock
├── src
├── tests
└── vendor
├── autoload.php
├── ...
利用 PHPUnit 的指令執行測試,
$ ./vendor/bin/phpunit tests
意思是對tests/
資料夾搜尋所有符合測試命名規則的類別函式,符合以下規則的函式才會被執行,包含大小寫:
由於目前還沒有寫任何測試,印出了
PHPUnit 8.3.5 by Sebastian Bergmann and contributors.
Time: 54 ms, Memory: 4.00 MB
No tests executed!
基礎的用法說完,剩下的細節就在範例中來說明吧!