前言 「這支測試已經綠燈很久了,應該沒問題吧?」 這句話最危險的地方在於,它把「測試綠燈」直接等同於「這段邏輯真的被驗證過」。今天要拆一個真實發生過的案例:一支...
前言 「要測試一段字串清洗邏輯,是不是要把清洗前後的每個字元都比對過一次?」 今天要看的是這個系統處理外部系統傳回的髒 XML 資料時,用的一種很精簡的測試手法...
前言 「這段爬蟲邏輯有測試,是不是就代表它夠穩固了?」 今天要誠實面對一個沒那麼漂亮的案例。這個系統負責從外部網頁抓取新聞資料的 Crawler 類別,目前只有...
前言 「這段邏輯的單元測試寫得很仔細,代表這個功能整體是安全的嗎?」 今天要看的這支測試,品質其實不差——針對單一登入(SSO)底層元件的驗證相當完整。但如果把...
前言 「要測試一個包著 SOAP 協議的 Client 類別,是不是一定要連上真實的外部服務才能驗證?」 前兩天講了測試替身的設計理念跟錄影帶的組織方式,今天要...
前言 「錄一次真實流量當測試資料,聽起來很方便,但錄下來的檔案越積越多,怎麼避免亂成一團?」 昨天講了兩支測試替身怎麼共用同一份錄製資料,今天要把鏡頭拉遠一點,...
前言 「要 mock 兩種不同通訊協定的外部服務,是不是要各自準備一份假資料?」 這個系統要跟外部校務系統交換資料,走的是兩種不同的技術路徑:一般的 HTTP...
前言 「同一段解析邏輯要處理好幾種輸入格式,測試該怎麼寫才不會變成複製貼上三份幾乎一樣的程式碼?」 這個系統有一個很典型的場景:外部系統回傳的新聞附件資訊,可能...
前言 「這支功能有寫測試,而且測試都是綠燈,應該可以放心吧?」 這句話聽起來很合理,但今天要拆一個真實案例,證明這個推論不一定成立。這個系統的登入功能確實「有測...
前言 「重構程式碼結構的時候,測試也要跟著大改嗎?」 很多時候答案是「不用,測試驗證的是外顯行為,內部怎麼組織不影響測試怎麼寫」。但今天要講一個例外:這個系統有...
前言 「授權邏輯這麼重要,應該要有專門的 unit test 才對吧?」 這是我一開始也有的直覺:Policy 決定誰能看什麼、誰能做什麼,理論上應該是整個系統...
前言 「這次改動同時影響了使用者管理跟角色管理兩個頁面,測試要寫在同一支檔案裡嗎?」 今天要看的案例,是這個系統一次真實的權限改動——一次調整同時影響了兩個不同...
前言 「同一個元件,有時候要單獨顯示,有時候要嵌在別的頁面裡顯示,這種情況測試該怎麼寫?」 昨天講的是「怎麼測一個 Filament 元件的動作有沒有真的發生」...
前言 「後台是用 Filament 這種管理面板套件開發的,測試也要照一般 HTTP 頁面那樣打請求、看回應內容嗎?」 答案是不行——至少不是最有效的方式。Fi...
前言 「這個頁面回傳 200,測試就算過了嗎?」 這是很多人寫 Feature 測試時,不知不覺會停下來的地方——狀態碼是 200,代表伺服器沒有拋出例外、路由...
前言 「這段排序邏輯已經跑了很久,應該沒問題吧?」 這句話幾乎是每個維護老專案的人都說過的話。今天要講的案例,剛好打臉了這句話:這個系統的首頁排序邏輯,實際上早...
前言 「這支測試要不要用 RefreshDatabase?」 這是一個看起來很小、但每次寫 Unit 測試都會遇到的判斷。今天要用這個系統裡兩支真正的純邏輯 U...
前言 「這筆測試需要的資料,migration 裡本來就有塞了,直接拿來用不就好了?」 這句話聽起來很省事——反正資料已經存在,何必再多寫一段 Factory...
前言 「User::factory()->create() 建出來的使用者,到底是一般人還是管理員?」 如果你的測試套件裡到處都是這種通用的 factor...
前言 「每支測試都要先登入一個有權限的使用者,是不是寫一個共用函式,直接把使用者塞進去就好?」 聽起來理所當然,但這句話裡藏著一個容易被忽略的陷阱:如果那個「共...
前言 「這個專案的測試是用 Pest 寫的還是 PHPUnit 寫的?」 如果你隨手打開這個系統的 tests/ 目錄亂逛,答案看起來很明確:滿眼都是 test...
前言 「測試不是分 Unit 跟 Feature 兩層就好了嗎?為什麼還要另外花 30 天講這件事?」 如果你的專案只有一套對外介面、不用跟任何外部系統交換資料...