第一支測試
由淺入深,快速入門
在寫測試之前,需要瞭解一些基礎知識:
3A 原則 - 測試只做這些事:
arrange - 測試前的準備
act - 執行測試
assert - 驗證測試結果
測試資料
單元測試為了要快與不依賴外部延伸資料,所以測試資料庫必須在每次跑完一個測試案例的時候清空資料。可以使用和執行環境相同的資料庫,但比較推薦使用 SQLite,因為又小又快,也能直接使用記憶體當儲存空間。
測試要放哪
測試的檔案必須跟受測的檔案的相對路徑一致
受測檔案: app/Http/Controllers/API/TargetController.php
測試檔案:tests/Unit/Http/Controllers/API/TargetControllerTest.php
示範測試 TargetController 的 show 方法:
target:
test:
在這個測試案例我做了幾件事
把 3A 步驟註解上去,這樣日後維護的時候能快速定位要修改的位置。
測試名稱使用 snake-case,主要是因為測試名稱通常很長,且 PHPUnit 會根據 `-` 和大寫斷句
使用
RefreshDatabase
,Laravel 內建重置資料庫的 Trait@test
相當於在 test method 開頭寫 test,告訴 PHPUnit 這個是測試案例@group
標記相同功能,日後跑測試案例可以只跑這個群組,可以加速開發流程Carbon::setTestNow()
設定測試時間,避免測試案例受到真實時間影響Target::factory()
,Laravel 內建建立假資料的功能。$this->getJson
,Laravel 內建測試 Open API 的方法
Last updated